> >> On 27 Jul 2016, at 12:05 PM, Trygve Inda <cocoa...@xericdesign.com> wrote: >> >> How is it retained by the main thread without an explicit retain call? >> >> I would be no different than a main thread calling: >> >> someVar [[MyObj alloc] init] >> [someVar doSomething]; >> >> If a worker thread were able to call [someVar release] between these two >> lines, the doSomething call could fail. > > > The atomic setter method probably looks something like this: > > - (void) setImageRep:(NSImageRep*) rep > { > @synchronized( self ) > { > [rep retain]; > [_imageRep autorelease]; > _imageRep = rep; > } > } > > i.e. the old value is autoreleased. Which thread’s pool gets that autorelease > is a matter for consideration though. I have no idea if it’s just left to the > caller’s pool, or if there are steps taken to ensure it ends up in the main > pool. Even if it’s the caller’s pool, unless you’re draining it on each loop, > it may only ever get drained when the thread ends, which is safe. But it could > accumulate a lot of unreleased memory which is another potential problem. > > Threads are tricky ;)
And BTW I am draining the pool on each loop of the worker thread. _______________________________________________ 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