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