5

Apple 的Advanced Memory Management 文档写得很好而且很精确,但我想知道它的图表:

(我的是当前版本 2011-09-28)

在此处输入图像描述

图中 and 之后allocinit引用计数(或保留计数)为 1,这是基本的内存管理规则。之后retain,引用计数现在是 2。然后 C 类向copy对象发送消息,之后,对象的引用计数仍然为 2。新对象的引用计数为 1。

到目前为止这符合规则,但是接下来,在图的顶部,A 类向release对象发送消息,引用计数应该是 1?该图有一个 2 代替。然后 B 类也向release对象发送消息,现在引用计数应该为 0。图中显示的是 1。这是正确的,或者可能有不同的方式来阅读图表,或者上面的某些概念不正确?

4

2 回答 2

4

我认为该图在两个方面有点误导。一是对于分配和保留步骤,相关的计数是操作的结果。然而,在释放步骤中,计数似乎是操作前的状态。这对我来说很有意义,因为没有“Destroyed”方法可以导致 1 到 0 的转换。

另一个具有误导性的部分是,我认为保留计数从未真正变为零,而且我看到人们因相信它确实变为零而感到困惑。

于 2012-05-13T17:21:02.543 回答
0

简单读为:在发布消息之前它的保留计数为 2,然后为 1。

为了更好地理解,最好将保留计数放在保留/分配消息中对象圈的右侧。

于 2012-05-13T17:21:16.170 回答