嘿伙计们,我有一个NSManagedObject的子类。在awakeFromInsert和awakeFromFetch中,我正在调用一个初始化方法,其中包括启动NSTimer。
现在我需要一个让计时器无效的地方。但是,dealloc,finalize,didTurnIntoFault,prepareForDeletion和willTurnIntoFault都没有被调用。
根据文档,当从内存中清除对象时,应该调用这些方法。它们都不是,但是所有数据都保存在持久性存储中。我很困惑为什么或如何。
我有什么办法可以导致这些方法在对象生命周期中不被调用吗?
答案 0 :(得分:0)
核心数据控制NSManagedObject
的生命周期。除非你问它,否则它不会自己从内存中清除一个对象。查看documentation,似乎有两种方式:
refresh:mergeChanges:
发送给MOC会导致对象变成故障。reset
发送给MOC会导致其重置,就像刚刚创建一样。但是,上述任何一项都需要您做出明确的操作,因此您不妨向该对象添加一个方法以使其计时器无效并调用该方法。
事实上,您的问题可能表明存在设计问题。 NSTimer本质上是一个用户界面事件。它应该由您的MVC控制器控制,该控制器向模型对象(NSManagedObject)发送消息以执行操作。