On Sep 3, 2013, at 9:26 AM, Jeff Kelley wrote: > You could use a dedicated dispatch queue for all property access and use > dispatch barriers to restrict access to the queue for writes, while still > allowing simultaneous reads. > > In -copy: > > - (id)copy > { > __block __typeof(self) copy; > > dispatch_async(self.propertyQueue, ^{
You can't use dispatch_async() for this. It has to be synchronous, since you're returning the value that's going to be set. > copy = [[[self class] alloc] init]; > // Copy properties here > }); > > return copy; > } > > This assumes a property called propertyQueue: > > @property (readonly, nonatomic) dispatch_queue_t propertyQueue; > > - (dispatch_queue_t)propertyQueue > { > if (!_propertyQueue) { > _propertyQueue = dispatch_queue_create("queue name here", > DISPATCH_QUEUE_CONCURRENT); > } > > return _propertyQueue; > } > > > In your property getters: > > - (int)count > { > __block int count; > > dispatch_async(self.propertyQueue, ^{ Same here. > count = _count; > }); > > return count; > } > > > And finally, in your property *setters*: > > - (void)setCount:(int)count > { > dispatch_barrier_async(self.propertyQueue, ^{ > _count = count; > }); > } Regards, Ken _______________________________________________ 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