Iphone 了解何时对对象调用retain?
什么时候应该使用Iphone 了解何时对对象调用retain?,iphone,cocoa-touch,memory-management,Iphone,Cocoa Touch,Memory Management,什么时候应该使用retain?我知道它会增加对象引用计数,因此基本上该对象上的下一次发布不会对其调用dealloc。很好,那又怎样?我听说这是一种惯例,如果你关心一个对象,你就会保留它。有这样的例子吗?这是真的吗 编辑: 我不是在寻找调试器何时告诉您这样做或这样做。所以,我调查了一下 用我的话说,这里有一个retain用法的例子 在代码中,您可以在某个地方调用一个方法,该方法返回一个您不拥有的对象 你在用那个东西吗 然后你想释放它=>你不能释放它,因为你不是所有者 您的解决方案是使用复制或保留
retain
?我知道它会增加对象引用计数,因此基本上该对象上的下一次发布
不会对其调用dealloc
。很好,那又怎样?我听说这是一种惯例,如果你关心一个对象,你就会保留它。有这样的例子吗?这是真的吗
编辑:
我不是在寻找调试器何时告诉您这样做或这样做。所以,我调查了一下
用我的话说,这里有一个retain
用法的例子
- 在代码中,您可以在某个地方调用一个方法,该方法返回一个您不拥有的对象
- 你在用那个东西吗
- 然后你想释放它=>你不能释放它,因为你不是所有者
- 您的解决方案是使用
或复制
。如果用户保留,则您将获得该对象的所有权保留
- 然后要释放该对象,您可以执行2
(因为保留时ref count是1+1),或者直接对其使用release
dealloc
dealloc
将真正“杀死”对象;但是有了2release
,您将不再是所有者,但创建它的程序仍然是所有者,因此对象仍然存在于某个地方(泄漏?僵尸?)
请告诉我,我很困惑。您所有的答案都可以在中找到 编辑 编辑之后,这里有一些更具体的细节: 在代码中,您可以在某个地方调用一个方法,该方法返回一个您不拥有的对象 因为你不拥有它,你无法控制它的一生。它可以在您仍然依赖它作为有效对象时释放 你在用那个东西吗 永远不能确定它是否会存在 然后你想释放它=>你不能,因为你不是所有者 但是你为什么要发布它呢?您不拥有该对象,因此不负责该对象的内存管理 看起来你想调用
release
,因为你认为这就是你管理内存的方式,而retain
就是我们所说的
以下是它的工作方式:
- 调用一个返回对象的方法。如果您尚未通过调用
、alloc
、new
或copy
收到此对象,则根据您不拥有该对象,因此您不负责管理此内存mutableCopy
- 在大多数情况下,您可以假定已传递自动释放对象。这意味着你无法控制它的寿命。为了确保在使用完它之前不会释放它,可以对对象调用
。您现在拥有此对象,并负责在将来某个时间对其调用retain
。现在关心对象的保留计数是初学者的错误。别担心。重要的是你有责任在上面调用release
release
- 使用对象时,请记住通用内存管理范例。例如,如果将此对象添加到
,则该数组将保留该对象NSArray
- 一旦完成了需要对对象执行的操作,就可以对其调用
。再一次。不要关心对象的保留计数,也不要关心其他哪些对象正在使用此对象。重要的是,您已经平衡了对release
的调用和对retain
的调用的数量release
再次:花点时间阅读Abizem建议您的文档。当然你会对它有更好的理解。可能重复[Objective-C中的内存管理]()我认为没有必要对此投反对票。厄普沃特德我很困惑。我只是不明白人们为什么要用它。我试图表达我将如何在刚才的编辑中使用它..您的编辑是错误的:您不应该直接调用dealloc。您也不应该调用两个版本。平衡方法或类中保留和释放的数量。感谢Trinca。似乎