仅仅因为我将对新alloc init
(ed)对象的引用传递给另一个类并不意味着该类将其保留在构造函数中,对吧?
据我所知,为了让一个类保留一些东西,它实际上需要向对象发送retain
消息。这是对的吗?
在我的例子中,我指的是我自己的自定义类,而不是Apple类。
答案 0 :(得分:3)
如果要引用它,则另一个类应该保留它。但是,这就是你所要上课的关注点。
是的,发送保留消息会保留它。
阅读本指南非常重要:
以下是一套很好的规则。第二个规则表示您保留了存储的内容,并且还表示收到的对象保证在该函数调用的生命周期内有效。这意味着如果你将一个对象作为arg并且你不打算将它存储为iVar / property,那么你就不需要保留它。
您拥有自己创建的任何对象
使用名称以“alloc”开头的方法创建对象, “new”,“copy”或“mutableCopy”(例如,alloc,newObject或 mutableCopy)。
您可以使用保留
取得对象的所有权通常保证收到的对象在其中保持有效 它收到的方法,并且该方法也可以安全地返回 反对它的调用者。你在两种情况下使用retain:(1)在 执行accessor方法或init方法 要存储为属性值的对象的所有权; (2) 防止某个对象因某些副作用而失效 其他操作(如“避免导致重新分配”中所述) 你正在使用的对象“)。
当你不再需要它时,你必须放弃一个人的所有权 您拥有的对象
您通过向对象发送释放消息来放弃对象的所有权 或自动发布消息。在可可术语中,放弃 因此,对象的所有权通常被称为 “释放”一个物体。
您不得放弃您不拥有的对象的所有权
这是以前的政策规则的必然结果 明确。
答案 1 :(得分:2)
正确。保留必须编码或不发生。