[
https://issues.apache.org/jira/browse/CB-401?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13248663#comment-13248663
]
Marc Rhodes commented on CB-401:
--------------------------------
You are, of course, correct. As you noted, I managed to overlook that this was
an assignment to a property not an ivar. I appreciate your kind explanation and
apologize for the unnecessary report based on a mistake in my analysis.
> 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