如果我发送一个 - 发布的话,集合是否会向它拥有的所有对象发送--release消息?

时间:2009-04-27 17:46:28

标签: iphone cocoa-touch memory-management uikit

我一直在读,如果一个集合“被释放”,它也会释放它的所有对象。另一方面,我还读到,一旦集合被解除分配,集合就会释放它的对象。

但苹果说,最后一件事可能并不总是会发生。系统决定是否解除分配是好的。在大多数情况下,它会,但在某些情况下不会。

所以我想知道一个集合是否会导致这样的内存泄漏? 当它确实发布了 - 它发送给集合本身的所有对象时,它应该实际上 - 一旦我获得集合本身就立即保存集合中的所有对象。

帮助我清楚了解一下。谢谢!

2 个答案:

答案 0 :(得分:8)

当您将一个对象添加到一个集合时,它会被集合保留,直到它被删除或者集合被释放为止。发送到集合的后续保留或释放消息不会更改集合中对象的保留计数。

换句话说,从所有权的角度考虑它,而不是计算保留。

答案 1 :(得分:4)

发送对象时,发布会丢弃其保留计数。当它的保留计数达到零时,就会被破坏。当容器被销毁(未被释放)时,它的对象被释放(但是如果由于其他原因它们的保留计数不为零,则不会被销毁)。

简短回答:这一切都会按照您期望的方式运作,您的问题是您正在查看“已发布”,意思是“被破坏”。他们是不同的。