Crash on iOS when taking multiple pictures ------------------------------------------
Key: CB-401 URL: https://issues.apache.org/jira/browse/CB-401 Project: Apache Callback Issue Type: Bug Components: iOS Affects Versions: 1.4.0 Environment: 1.4.1, 1.5.0 on iOS Crash on iPad (third generation) Reporter: Marc Rhodes Assignee: Shazron Abdullah Priority: Critical We have an app that allows the user to take four pictures. It had been working fine but we started seeing crashes when we tested on a new iPad (third generation). We have eliminated the crash in our application by making the following change to the PhongeGap/Cordova code. I tested with PhoneGap 1.4.1. I'm currently upgrading to Cordova 1.5.0 but a review of {{Camera.m}}/{{CDVCamera.m}} shows only the name changes. Line numbers below correspond to {{CDVCamera.m}}. In {{CDVCamera.m}}, we found the following code around line 67: {code} if (self.pickerController == nil) { self.pickerController = [[[CameraPicker alloc] init] autorelease]; } {code} We removed the autorelease message: {code} if (self.pickerController == nil) { self.pickerController = [[CameraPicker alloc] init]; } {code} Our reason for doing this is that we found that {{self.pickerController}} appears to be released in all the right places: * at line 220 in {{imagePickerController:didFinishPickingMediaWithInfo:}} {code} self.pickerController = nil; {code} * at line 251 in {{imagePickerControllerDidCancel:}} {code} self.pickerController = nil; {code} * at line 399 in {{dealloc}}: {code} self.pickerController = nil; {code} This last one may not always be necessary but should be okay since the previous releases set the instance variable to {{nil}}. And, of course, since pickerController is a property, setting it to {{nil}} serves to release it. I think both autoreleasing and explicitly releasing an object is not following the memory management rules. Apple says: * [https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html] * Memory Management Policy ** Basic Memory Management Rules *** You relinquish ownership of an object by sending it a release message or an autorelease message. My thought (confirmed with an instructor at [Big Nerd Ranch|http://www.bignerdranch.com/]) is that "or" is the key word in this statement and removing the extra autorelease could certainly prevent zombie crashes that only occur in certain circumstances. This issue seems like a duplicate of [CB-264|https://issues.apache.org/jira/browse/CB-264] but since that one is resolved as "won't fix," I have submitted this new issue containing a possible solution. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira