在哪些情况下我必须保留一个对象?

问题描述:

首先,最简单的情况:在哪些情况下我必须保留一个对象?

当一个实例需要一个对象时,我做一个retain属性。这是我现在想到的唯一一个很好的例子。

是否还有其他情况下我想保留一个对象,除了保留属性的setter?

另一个例子是,如果您需要在将对象从集合中删除后处理对象。集合保留其对象,因此必须在删除对象时发送-release消息。因此,如果您从集合中删除对象并尝试使用它,则不能保证它尚未被释放。

在这种情况下,您需要将-retain发送给对象,但它仍在收集中,以确保它在删除后仍然有效。

为了通用,如果您需要它,可以保留一个对象。

+0

而当你没有分配它在第一个地方。 – user210504 2011-01-27 23:49:30

使用和init或copy方法创建对象时,对象以保留计数1来到您的位置,因此您不需要保留这些对象,但需要释放它们。

如果您将它存储到类似NSArray或NSDictionary的集合中,集合将保留它,并在删除对象时将其释放。但是,您仍然拥有该对象,因此您还需要释放它。存储后释放它是合理的。

除此之外,你可能会得到一个自动释放对象,如果你希望它会超过当前运行循环迭代,你可能想保留它。