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.
--
Greg Parker [email protected] Runtime Wrangler
_______________________________________________
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]