1

嗨,大家好,我有一個NSManagedObject的子類。在awakeFromInsert和awakeFromFetch中,我調用了一個初始化方法,其中包括啓動NSTimer。NSManagedObject子類困境

現在我需要一個地方來使計時器無效。但是,dealloc,finalize,didTurnIntoFault,prepareForDeletion和willTurnIntoFault不會被調用。

根據文檔,當對象從內存中清除時,這些方法都應該被調用。它們都不是,但是所有數據都保存在持久性存儲中。我爲什麼或者如何感到困惑。

有什麼我可以做的事情可能導致這些方法在對象生命週期中不被調用?

回答

0

核心數據控制着NSManagedObject的壽命。除非你提出要求,否則它不會從內存中清除對象。縱觀documentation,似乎有兩種方式:

  1. 發送refresh:mergeChanges:到MOC導致變成一個錯誤的對象。
  2. 發送reset到MOC導致它重置自己,就像它剛剛創建。

但是,上述任何一項都需要對您的部分採取明確的操作,因此您可以向對象添加一個方法來使其計時器無效並調用該方法。

事實上,您的問題可能表明設計問題。 NSTimer本質上是一個用戶界面事件。它應該可能由您的MVC控制器控制,該控制器向模型對象(NSManagedObject)發送消息來執行操作。

+0

但是應用程序退出時不應該從內存刷新對象嗎?因此,像dealloc和didTurnIntoFault這樣的清理方法應該被稱爲...不是嗎? – 2010-12-21 00:35:56