这是我在我们技术团队所做的一次分享,稍作修改放到博客上来。
我们技术团队会不定期(一般一个月1~2次)做技术分享,对我们团队有兴趣的可以私信我。
以下是正文。
这里的主题是“Inside ARC”,顾名思义,主要是探讨ARC在我们看不见的地方为我们做了什么事情,以及怎么做的。出发点是对底层实现的兴趣,不了解这些也不妨碍写好代码,了解一点应该有益。
以下一些内容参考自Apple的官方文档《Transitioning to ARC Release Notes》或维基百科,后续不再一一说明。
首先要明确的是ARC并不是GC,只是把之前由程序员手工管理内存(如retain/release)的事情交给编译器来处理,即编译器为程序员在合适的时机插入一些内存管理代码。
比较例外的是weak特性,除了编译器外,还需要runtime的支持。这直接体现在OS X 10.7和iOS 5之后,才支持完整的ARC特性,包括弱引用的支持(为什么弱引用需要runtime支持?)。
利用Xcode提供的汇编功能(Product - Perform Action - Assemble “filename”),我们可以初步了解(或推测)编译器为我们添加的代码。
不过我们看到的是AT&T汇编代码,一片的数据在寄存器之间流动,不是很利于分析。
所以我们可以“在一个ARC项目中针对部分文件不采取ARC编译”,比如针对“ARCObject.m”采用ARC方式编译,而针对“nonARCObject.m”不采取ARC方式编译,用来作比较。
Inside ARC — to see the code inserted by the compiler,布布扣,bubuko.com
Inside ARC — to see the code inserted by the compiler
原文地址:http://blog.csdn.net/jasonblog/article/details/26679265