On 16 Nov 2012, at 22:36, Quincey Morris <quinceymor...@rivergatesoftware.com> wrote:
> On Nov 16, 2012, at 09:53 , James Montgomerie <ja...@montgomerie.net> wrote: >> Let's assume I'm using ARC. If I create an NSMapTable with "[NSMapTable >> strongToWeakObjectsMapTable]", is it safe to put objects into it that might >> be referenced from, and perhaps deallocated on, a background thread? >> Specifically, might I get a half-deallocated or retain-count-zero object >> back from -objectForKey: if a 'right' race condition happens? > > It's a mutable collection, and it's listed in the thread safety guide as > "unsafe". > > Specifically, that means you shouldn't be modifying a map table (in the sense > of adding, replacing or deleting objects) while a different thread might be > accessing the map table, not even just reading it. This is not a memory > management issue, but rather a data integrity issue. > > As for the objects themselves, what do you mean by "half-deallocated" or > "retain-count-zero"? If an object is strongly referenced in the map table > (whether as a key or a value), its lifetime can't end before it's removed > from the table. If an object is ARC-weakly referenced, the reference can go > to zero at any time, but that happens in a thread-safe manner. Anyway, > because this is ARC, if you get a non-nil value from the table, the > referenced object is kept alive while you have the reference (until the end > of the referencing scope, assuming you do nothing to prolong the lifetime > beyond that point). Basically, I'm worried that the NSMapTable reacting to a weak object disappearing on a background thread is the moral equivalent of me mutating the NSMapTable on a background thread (turning the memory management issue into a data integrity issue). It seems like, since I don't see any documentation about it, there's a possibility that although ARCs handling of __weak is atomic and thread-safe, NSMapTable's reaction to the disappearance of a weak object it contains is not. From your answer, you would say that this is not the case? Jamie. _______________________________________________ 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