2011-03-08 99 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