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]

Reply via email to