> On Aug 14, 2015, at 6:59 PM, Trygve Inda <cocoa...@xericdesign.com> wrote:
> 
>> My main thread periodically downloads some data from a website. This is
>> extracted into an NSArray (non-mutable) and placed in a property:
>> 
>> @property (atomic, retain) NSArray* myArray;
> 
>> NSString* someString = [[hostObject myArray] objectAtIndex:2];
>> 
>> How can I do this safely?
>> 
>> The problem here is that if myArray is being replaced in the main thread
>> after [hostObject myArray] is called but before objectAtIndex:2 is called,
>> than myArray will disappear out from under the caller.
> 
> One of the things that an atomic property's getter does, for an object pointer
> type, is retain the object within the synchronization and autorelease it
> before returning it.  So, this is safe against that particular problem.  The
> returned array will remain valid within the caller's scope.
> 

That's good to hear. I couldn't find that documented anywhere. This seems
like the best solution - and the only place I have ever needed to use an
atomic property.

I can't think of a better way to do this sort of thing other than the Core
Data technique I mentioned in the original post.

Thanks,

Trygve



_______________________________________________

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

Reply via email to