On 5 Dec 2012, at 12:59, Greg Parker <[email protected]> wrote: > On Dec 4, 2012, at 8:56 PM, Gerriet M. Denkmann <[email protected]> wrote: >> I have (using Arc) a method which works fine: >> NSString *explanation; >> [ self doSomeThingAndExplain: &explanation ]; >> >> Now I decided that sometimes I don't need this explanation. So I changed it >> to: >> >> NSString **explanatioP = urgent ? NULL : &explanation; // <-- "no explicit >> ownership... >> [ self doSomeThingAndExplain: explanatioP]; // passing address of >> non-local object... >> >> But now the compiler gets really upset (errors written as comments above). >> >> What Arc-magic is needed to get this to compile? > > You need to add explicit ownership to your ** declarations. ARC needs to know > whether explanationP points to to a strong variable or a weak variable or an > autoreleasing variable. > > This is one way: > -(void) doSomethingAndExplain:(__strong NSString **)explanationP; > > __strong NSString **explanationP = urgent ? NULL : &explanation; > [self doSomethingAndExplain:explanationP]; > > This is another way: > -(void) doSomethingAndExplain:(NSString **)explanationP; > // NSString** parameter is implicitly __autoreleasing NSString ** > > __autoreleasing NSString **explanationP = urgent ? NULL : &explanation; > [self doSomethingAndExplain:explanationP]; > > The first version may have better performance because it avoids the > autorelease pool.
Another way (I don't know how efficient it is though) is: [self doSomethingAndExplain: urgent ? NULL : &explanation ]; Does this use autorelease pool ? Kind regards, Gerriet. _______________________________________________ Cocoa-dev mailing list ([email protected]) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [email protected]
