【问题标题】:Does a collection send a -release message to all objects it holds, if I send it an -release?如果我向它发送-release,集合是否会向它持有的所有对象发送-release消息?
【发布时间】:2010-10-22 03:01:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone cocoa-touch memory-management uikit


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      换句话说,考虑所有权,而不是计算保留。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2021-05-03
      相关资源
      最近更新 更多