On Dec 4, 2012, at 8:56 PM, Gerriet M. Denkmann <gerr...@mdenkmann.de> 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. -- Greg Parker gpar...@apple.com Runtime Wrangler _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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 arch...@mail-archive.com