Re: Arc and **
Re: Arc and **
- Subject: Re: Arc and **
- From: Greg Parker <email@hidden>
- Date: Tue, 04 Dec 2012 21:59:07 -0800
On Dec 4, 2012, at 8:56 PM, Gerriet M. Denkmann <email@hidden> 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@hidden Runtime Wrangler
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
References: | |
| >Arc and ** (From: "Gerriet M. Denkmann" <email@hidden>) |