Re: How to keep things alive in Arc?
Re: How to keep things alive in Arc?
- Subject: Re: How to keep things alive in Arc?
- From: "Gerriet M. Denkmann" <email@hidden>
- Date: Mon, 09 May 2016 12:12:29 +0700
> On 9 May 2016, at 09:25, Roland King <email@hidden> wrote:
>
>
>> On 9 May 2016, at 10:11, Gerriet M. Denkmann <email@hidden> wrote:
>>
>> Thing *aThing = [ Thing new ];
>>
>> void *thingData = [ aThing data ]; // pointer to a buffer owned by aThing
>>
>> … never use aThing after this point → Arc might release aThing right now
>> … but do lots of things with thingData
>>
>> … no more need for thingData
>> [ aThing release];
>>
>> How to prevent Arc to release aThing before I have done with thingData?
>>
>> Gerriet.
>>
>
>
> well [ aThing release ] won’t work in ARC, I assume you really mean aThing = nil, or just letting aThing fall out of the bottom of the local scope
I meant: this was the code before I converted to Arc.
> either mark [ Thing data ] with NS_RETURNS_INNER_POINTER which is equivalent to __attribute__((objc_returns_inner_pointer))
I did this, and now the app behaves again as it did before converting to Arc. No more data mutating behind my back and other strange effects.
Thanks a lot!
The only mention of this, which Xcode could find for me, was: Foundation Release Notes for OS X v10.8 and Earlier.
Is there any other documentation (e.g. with a list of all __attribute__s and their respective meaning)?
> or mark aThing with __attribute__((objc_precise_lifetime))
I think that NS_RETURNS_INNER_POINTER is more self explaining.
Kind regards,
Gerriet.
_______________________________________________
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