2011-03-08 98 views
3

我在我的NSManagedObject实例上观察到以下行为。核心数据管理对象的生存期

  1. ObjA是从NSManagedObjectContext ContextA加载的NSManagedObject实例。
  2. 我保留ObjA
  3. 我访问ObjA的PropertyA(ObjA没有关系,只有基本的属性) - 所有的作品在这个阶段
  4. 我从ContextA
  5. 删除ObjA
  6. 罚款我救ContextA
  7. ObjA是没有被释放(因为我对它进行了额外的保留)。例如,我仍然可以检查它是否为retainCount。
  8. 我访问ObjA的PropertyA - >我得到SIGABRT

我不知道这是否是CoreData设计的工作方式或从我的代码的副作用。

回答

2

就像this question你问抓着NSManagedObjects你告诉他们被删除的商店。 NSManagedObject文档说“重要的是要记住Core Data保留对被管理对象生命周期(即原始内存管理)的独占控制权。”复制你需要的信息,不要在你告诉商店它被释放(从商店中删除)之后使用管理对象,因为它确实是。

+0

好的,那就解决了。尽管Core Data假设独占内存管理控制,但仍然有点奇怪。使共享托管对象变得有点棘手。 – 2011-03-08 10:14:31

+1

你可以通过它们,只是不要先删除它们。只要您在同一个线程中,您的托管对象上下文也可以传递。 – 2011-03-08 11:07:17