今日长缨在手,何时缚住苍龙。这篇文章主要讲述当前关于高级内存管理的Apple文档是否存在轻微的不准确之处?相关的知识,希望能为你提供帮助。
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。这是正确的,或者可能有不同的方式来阅读图表,或者上面的某些概念可能不正确?
答案我认为这个图表在两个方面有点误导。一个是对于alloc和retain步骤,相关的计数是由于操作而发生的。但是,在释放步骤中,计数似乎是操作之前的状态。这对我来说是有意义的,因为没有“Destroyed”方法可以导致1到0的转换。
【当前关于高级内存管理的Apple文档是否存在轻微的不准确之处()】另一个误导性的部分是,我认为保留计数不会真正归零,而且我看到人们因为相信它而感到困惑。
另一答案简单地读作:在发布消息之前它的保留计数为2,然后是1。
为了更好地理解,最好将保留计数放在retain / alloc消息中对象圈的右侧。
推荐阅读
- 让我们加密证书与android api <20一起使用
- 在Swift Cocoa App中实现“打开文件”
- 在tomcat中部署战争后,在catalina中重复WebapplicationException
- Tomcat war run application - 无法启动组件
- 从tomcat context.xml而不是application.properties获取数据源
- 使用Laravel处理密集任务
- Gulp揭秘(构建基于流的任务自动化工具)
- 指南(小型团队的软件版本管理)
- 开发人员的十大前端设计规则