> On Jul 28, 2015, at 10:01 AM, Roland King <r...@rols.org> wrote: > > >> On 28 Jul 2015, at 9:12 pm, Trygve Inda <cocoa...@xericdesign.com> wrote: >> >> I gather that when using NSPrivateQueueConcurrencyType, all operations (a >> fetch for example) have to be done within a performBlock call. >> > > ... > >> Then later, this context is used outside a performBlock: >> >> >> NSArray *matchingQuakes = [taskContext >> executeFetchRequest:matchingQuakeRequest error:&anyError]; >> >> >> Why does this work? > > You are supposed to call performBlock so that all accesses to the MOC are > serialized on the queue and so you get thread safety that way. However it's > quite possible to call the methods directly on the MOC in any thread context > and they will work, all the performBlock() actually does is queue the same > block of code onto the dispatch queue and when it's its turn, it executes by > calling [ moc executeFetch.. blah blah]. > > If you do that of course you have no thread safety any more and are likely to > blow up. In this case there's only one thread (I believe) and so the accesses > are serialized anyway and it works. It's a bad piece of code. > > I filed an enhancement report requesting that the coredata stack assert if > you called a private queue MOC method from the wrong queue, I don't recall > seeing anything come of it, however I do remember there is quite a lot of > logging you can turn up on CoreData and it's possible one such log will tell > you you're doing this.
As Roland states, it is a bug. You can edit the scheme and add this to the arguments passed on launch and it crashes. -com.apple.CoreData.ConcurrencyDebug 1 http://oleb.net/blog/2014/06/core-data-concurrency-debugging/ Dave Reed _______________________________________________ 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