objective-c – 如何确保在应用程序终止时调用dealloc代码?

objective-c – 如何确保在应用程序终止时调用dealloc代码?,第1张

概述根据NSObject的文档: Important: Note that when an application terminates, objects may not be sent a dealloc message since the process’s memory is automatically cleared on exit — it is more efficient simply 根据NSObject的文档:

important: Note that when an
application terminates,objects may
not be sent a dealloc message since
the process’s memory is automatically
cleared on exit — it is more
efficIEnt simply to allow the
operating system to clean up resources
than to invoke all the memory
management methods.

这没关系,但是如果我的对象需要在dealloc上做一些事情,比如将状态保存到磁盘或记录某些内容?如何确保调用代码

解决方法 持久性管理不应与dealloc相关联.如果要保存对象状态,则应该使用某种会话对象来收集脏对象,并在应用程序终止/进入后台时保存更改.

使用应用程序设置的示例:假设您不希望将NSUserDefaults用于应用程序的设置,可能是因为您有一些额外的逻辑要做.您有一个设置类来保留所有设置,显然您希望保持更改.

您可以将所有持久性逻辑填充到Settings类中,但这违反了单一责任原则. (=这有很好的理由说明为什么会让你感到痛苦.)所以你可以添加一个Session类,它将持久保存在Settings中所做的更改.

当应用程序启动时,您将创建一个Session实例并询问设置:

Session *session = [[Session alloc] init];Settings *settings = [session loadSettings];

现在,如果磁盘上有一个包含已保存设置的文件,会话将加载它(这很简单,因为Settings类实现了NSCoding).如果没有,会话将创建一个新的Settings实例并返回该实例.此外,会话可能会开始监视返回的Settings实例中的更改,例如使用NSNotificationCenter. (当设置发生变化时,Settings对象会触发通知,这很自然.)

现在,当您更改从会话中获取的Settings实例中的内容时,会话将注意到它并将更改保存到磁盘.这应该是微不足道的,因为Settings实现了NSCoding.您还可以将对象标记为脏,并且每隔几秒只保存更改,这是一个更好的解决方案,以防您经常更新对象.在这种情况下,您可能还希望在应用程序要终止或正在进行后台时强制保存会话.

我不是说这种情况是完美的,但它肯定比坚持dealloc的对象更好:-)

总结

以上是内存溢出为你收集整理的objective-c – 如何确保在应用程序终止时调用dealloc代码?全部内容,希望文章能够帮你解决objective-c – 如何确保在应用程序终止时调用dealloc代码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1071051.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存