2

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

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

所以我想知道一个集合是否会导致这样的内存泄漏?并且当它在向集合本身发出 -release 消息时释放所有对象时,它实际上应该在我保留集合本身时立即保留集合中的所有对象。

帮助我清楚地了解这一点。谢谢!

4

2 回答 2

8

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

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

于 2009-04-27T17:56:02.417 回答
4

向对象发送版本会降低其保留计数。当它的保留计数达到零时,它就会被销毁。当容器被销毁(未释放)时,它的对象被释放(但如果它们的保留计数由于其他原因不为零,则不会被销毁)。

简短的回答:这一切都会按照您的预期进行,您的问题是您将“释放”视为“被摧毁”的意思。他们是不同的。

于 2009-04-27T17:58:36.810 回答