On Mar 31, 2014, at 10:16 PM, Trygve Inda <cocoa...@xericdesign.com> wrote:

> I need to be able to set a new myDict and not have it happen between the
> reading of different values from the dictionary by other threads.

Don’t expose the dictionary in mutable form. You can’t make that thread-safe 
unless all the clients voluntarily agree to do something like wrap their usage 
with @synchronized blocks using the dictionary as a parameter.

For example,

> @synchronize(myDict)
> {
>    myCopy = [[NSDictionary alloc] initWithDictionary:myDict copyItems:YES];
> }

If some other thread mutates myDict during this block, you’ll probably crash or 
corrupt the heap.

I’d recommend making your property an immutable NSDictionary instead. (I’ve 
found that exposing mutable collections as properties usually doesn’t work 
well. Not just because of threading, but because the owning object loses all 
control over what’s in the collection.)

—Jens
_______________________________________________

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