从Autorelease中删除对象

时间:2010-09-30 20:42:38

标签: iphone objective-c

如果我创建了一个自动释放的对象,是否有一种方法可以标记它实际上是“未自动释放”?

我觉得我听说过[对象保留]会做我正在寻找的事情,但我不确定。

3 个答案:

答案 0 :(得分:7)

取决于你真正想要的东西[对象保留]会做什么......或者什么也不做。

如果你想要的是“我的对象应该经过自动释放池的消耗”,那么[object retain]将为你做到这一点。它将使对象生效,直到您有[对象释放] s(或[对象自动释放] s +池排水)的匹配数量。

如果你想让对象不要使自动释放池更大,不要让池的流失速度稍慢,或者确保对象在下一个池流失之前死掉,那么[object retain]将不会这样做。实际上,做这些事情的唯一真正方法是确保对象永远不会进入自动释放池(或者在较小程度上,创建一个私有自动释放池并管理其生命周期)。

答案 1 :(得分:3)

当一个对象被发送autorelease时,它会将自己添加到自动释放池中。在运行循环的每次迭代中,自动释放池被耗尽。它通过向池中的每个对象发送release消息来消耗它自己。如果将对象添加到池中两次,则会发送两条release条消息,依此类推。这是一个非常简单的机制,可以大大简化内存管理。

如果您的对象已经发送了autorelease消息,那么通过发送相同的对象retain,您将取消自动释放池耗尽时的效果。

答案 2 :(得分:2)

是的,调用[object retain]正是您想要的。