【发布时间】:2011-03-23 02:57:40
【问题描述】:
我使用 [self retain] 来保存对象本身,并使用 [self release] 在其他地方释放它。这有时非常方便。但这实际上是一个引用循环或死锁,大多数垃圾收集系统都希望解决这个问题。我想知道objective-c 的自动释放池是否可以找到循环并通过在达到[自我释放] 之前释放对象来给我惊喜。我的方式是否受到鼓励?我如何确保垃圾收集(如果有)不会太聪明?
【问题讨论】:
-
你可能想要避免这种模式,除了一些非常特殊的情况。你能告诉我们更多关于你的使用背景吗?当必须从其他地方进行分配时,为什么对象会自我保留?
-
上下文是,我使用 UIViewController 的子类作为全屏模型对话框。父视图发出对话框,但是当对话框关闭时,它确实需要知道事件。
-
上下文是,我使用 UIViewController 的子类作为全屏模型对话框。父视图发出对话框,但是当对话框关闭时,它确实需要知道事件。如果我直接使用 UIView 而不是 UIViewController,就没有这样的问题,因为当 [self removeFromSupperView] 时,视图的引用计数减少了一个。但是,UIViewController 的子类可以自动链接到同名的 xib 文件,这就是我使用 UIViewController 的原因。
标签: memory-leaks garbage-collection objective-c++ autorelease