为了帮助更好地处理并发,NSManagedObjectContext添加了performBlock:和performBlockAndWait:方法。我一直在使用它们,但可能相对天真,现在意识到我从未真正问过一个问题。
如果我在performBlock方法内部创建一个NSManagedObject子类,则其“home”线程是其父上下文的线程——在NSPrivateQueueConcurrencyType情况下,这可能是一个独立的线程,我无法访问其他内容。
因此,我需要执行performBlock调用才能访问我的托管对象中包含的数据吗?或者当使用getter时是否有后台魔法来帮助保护我?(尽管这似乎是个坏主意...)
NSManagedObject
的读取不是线程安全的,因为Core Data会进行缓存,而缓存写入不是线程安全的。 - George Karpenkov