On Mar 31, 2014, at 10:16 PM, Trygve Inda <[email protected]> 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 ([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]