保留释放计数,需要确认

时间:2011-09-30 03:44:09

标签: objective-c retain

仅仅因为我将对新alloc init(ed)对象的引用传递给另一个类并不意味着该类将其保留在构造函数中,对吧?

据我所知,为了让一个类保留一些东西,它实际上需要向对象发送retain消息。这是对的吗?

在我的例子中,我指的是我自己的自定义类,而不是Apple类。

2 个答案:

答案 0 :(得分:3)

如果要引用它,则另一个类应该保留它。但是,这就是你所要上课的关注点。

是的,发送保留消息会保留它。

阅读本指南非常重要:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

以下是一套很好的规则。第二个规则表示您保留了存储的内容,并且还表示收到的对象保证在该函数调用的生命周期内有效。这意味着如果你将一个对象作为arg并且你不打算将它存储为iVar / property,那么你就不需要保留它。

来自linked Apple doc

  

您拥有自己创建的任何对象

     

使用名称以“alloc”开头的方法创建对象,   “new”,“copy”或“mutableCopy”(例如,alloc,newObject或   mutableCopy)。

     

您可以使用保留

取得对象的所有权      

通常保证收到的对象在其中保持有效   它收到的方法,并且该方法也可以安全地返回   反对它的调用者。你在两种情况下使用retain:(1)在   执行accessor方法或init方法   要存储为属性值的对象的所有权; (2)   防止某个对象因某些副作用而失效   其他操作(如“避免导致重新分配”中所述)   你正在使用的对象“)。

     

当你不再需要它时,你必须放弃一个人的所有权   您拥有的对象

     

您通过向对象发送释放消息来放弃对象的所有权   或自动发布消息。在可可术语中,放弃   因此,对象的所有权通常被称为   “释放”一个物体。

     

您不得放弃您不拥有的对象的所有权

     

这是以前的政策规则的必然结果   明确。

答案 1 :(得分:2)

正确。保留必须编码或不发生。