Ron*_*gge 7 core-data objective-c ios
NSManagedObjectContext已经添加了performBlock:和performBlockAndWait:方法,以帮助简化并发.我一直在使用它们 - 可能相当天真 - 我只是意识到有一个我从未真正问过的问题.
如果我在其中一个performBlock方法中创建一个NSManagedObject子类,它的'home'线程就是它的父上下文的线程 - 在NSPrivateQueueConcurrencyType的情况下,它可能是一个独立的线程,我没有其他访问权限.
那么我是否需要执行performBlock调用才能访问托管对象中包含的数据?或者是否有背景魔法在使用吸气剂的情况下帮助保护我?(或者是安装者,虽然这看起来像个坏主意......)
Dan*_*lly 15
NSManagedObject不应该在它managedObjectContext的线程/队列之外使用(有时它可以工作,有时你崩溃==>不要这样做).
CoreData不保证对对象的安全读取访问.
要访问"私有队列"上下文所拥有的对象,请始终使用[context performBlock:...]或[context performBlockAndWait:...],除非您访问其objectID或managedObjectContext属性.
你需要使用performBlock:或performBlockAndWait:,但有一个例外.如果您正在使用NSMainQueueConcurrencyType 并且您正在主队列上使用托管对象,则可以直接访问它,不使用任何阻止.当您需要从托管对象更新UI时,这可以非常方便,反之亦然.
| 归档时间: |
|
| 查看次数: |
1595 次 |
| 最近记录: |