【发布时间】:2011-05-25 22:31:32
【问题描述】:
什么时候应该使用retain?我知道它会增加对象引用计数,所以基本上该对象上的下一个release 不会调用dealloc。好的,那又如何?我读到这是某种约定,如果你关心一个对象,你retain它。有没有这样的例子?这是真的吗?
编辑:
我不是在寻找调试器何时告诉您这样做或这样做。所以,我调查了this。
用我的话来说,这是一个 retain 用法的示例
- 在您的代码中,您在某处调用了一个方法,该方法返回一个您不拥有的对象
- 您使用该对象
- 那么你想释放它 => 你不能因为你不是所有者
- 您的解决方案是使用
copy或retain。如果您使用retain,那么您将获得该对象的所有权。 - 然后要释放该对象,您可以执行 2
release(因为您保留时引用计数为 1+1)或直接在其上使用dealloc
是这样吗?我不这么认为,因为一个对象可以有多个所有者。所以最后一点,调用dealloc 真的会“杀死”对象;但是使用 2 release,您将不是所有者,但创建它的程序仍然是,因此对象在某处仍然存在(泄漏?僵尸?)
我很困惑。
【问题讨论】:
-
[Objective-C 中的内存管理](stackoverflow.com/questions/106627/…)的可能副本
-
我认为没有必要对此投反对票。赞成
-
我对保留感到很困惑。我只是不明白为什么有人会使用它。我试图表达我将如何在我刚刚所做的编辑中使用它..
-
您的编辑不正确:您永远不应该直接调用 dealloc。而且你也不应该调用两个版本。在方法或类中平衡保留和释放的数量。
标签: iphone cocoa-touch memory-management