当前关于高级内存管理的Apple文档是否存在轻微的不准确之处?

时间:2012-05-13 17:10:28

标签: objective-c cocoa

Apple的Advanced Memory Management doc编写得非常精确,但我想知道它的图表有:

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

enter image description here

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

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

2 个答案:

答案 0 :(得分:4)

我认为这个图表在两个方面有点误导。一个是对于alloc和retain步骤,相关的计数是由于操作而发生的。但是,在释放步骤中,计数似乎是操作之前的状态。这对我来说是有意义的,因为没有“Destroyed”方法导致1到0的转换。

另一个误导性的部分是,我不认为保留计数真的变为零,我看到人们因为相信它而感到困惑。

答案 1 :(得分:0)

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

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