Apple的Advanced Memory Management doc编写得非常精确,但我想知道它的图表有:
(我的是当前的修订版2011-09-28)
在图中,在alloc
和init
之后,引用计数(或保留计数)为1,这是基本的内存管理规则。在retain
之后,引用计数现在是2.然后C类向对象发送copy
消息,之后,对象仍然具有2的引用计数。新对象具有引用计数为1。
到目前为止,这符合规则,但接下来,在图的顶部,A类向对象发送release
消息,引用计数应为1?该图有一个2代替。然后,B类也向对象发送release
消息,引用计数现在应为0.该图显示为1。这是正确的,或者可能有不同的方式来阅读图表,或者上面的某些概念可能不正确?
答案 0 :(得分:4)
我认为这个图表在两个方面有点误导。一个是对于alloc和retain步骤,相关的计数是由于操作而发生的。但是,在释放步骤中,计数似乎是操作之前的状态。这对我来说是有意义的,因为是没有“Destroyed”方法导致1到0的转换。
另一个误导性的部分是,我不认为保留计数真的变为零,我看到人们因为相信它而感到困惑。
答案 1 :(得分:0)
简单读作:在发布消息之前它的保留计数为2,然后是1.
最好在保留/分配消息中将保留计数放在对象圈的右侧,以便更好地理解。