自我保护和自我释放对象的策略

时间:2012-12-14 12:00:58

标签: objective-c design-patterns memory-management

我需要实现一些可以在应用程序中的几个不同位置使用的功能。它基本上是通过网络发送的东西,但我不需要将它附加到任何特定视图 - 我可以通过UIAlertViews将所有内容传达给用户。

我想要做的是将功能封装在一个对象(?)中,该对象可以在一段时间内保持自己的状态,然后自行消失。我已经阅读了几个类似的主题,通常不建议有一个保留然后释放自己的对象,但另一方面,你有单身,除了它们永远不会被释放的事实,在性质上是非常相似的。您不需要继续引用它们只是为了正确使用它们。然而,在我的情况下,我觉得创建一个单例然后让它活着需要几秒钟来执行它会有点浪费。

我想到的是类的本地静态字典,它保留对类实例的唯一引用,然后,当一个实例完成其任务时,它会在延迟后执行选择器'removeObjectForKey',这将删除唯一存在的引用并有效地杀死对象。这样我在内存中只保留一本字典,无论如何大部分都是空的。

问题是:我应该注意这种解决方案是否存在任何意想不到的副作用,是否有其他描述情况的良好模式?

1 个答案:

答案 0 :(得分:0)

所以基本上不是你自己的类的持久对象,你有一个NSDictionary类型的持久对象?这有什么用?你的对象异常大吗?如果为了几个字节而使代码库变得更复杂,那不是一个很好的权衡。

特别是现在ARC很常见,这种诡计通常不是一个好主意。您是否测量了单例方法所需的内存量并发现它是一个问题?除非你这样做,否则使用单身人士。这是更简单的代码,所有其他条件相同,更简单的代码要好得多。