On Aug 14, 2015, at 6:59 PM, Trygve Inda <[email protected]> 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.

Regards,
Ken


_______________________________________________

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