下面总结一下,关于iOS中的ARC的来龙去脉和作用,好处等。
Object-C/iOS中的内存管理简介
写iOS程序,用的编程语言是Object-C。
面向对象的Object-C中,对于对象的管理,主要是通过引用计数来实现的:
- 如果引用计数大于0,则说明有人还在使用当前对象,所以系统不会释放此对象所占用的内存;
- 如果引用计数为0,则说明没人用此对象了,所以系统可以去释放对象所占用的内存了;
由此,实现了内存管理。
因此,设计了引用计数这套技术,主要目的就是用来实现 保留仍在使用的对象,释放没人用的对象,以优化内存资源的使用,减少内存的泄露,提高程序的性能。
ARC的来源
而Object-C中,对于引用计数这个任务,之前都是需要程序员自己去给变量加上对应的setter,此处称其为修饰符,比如
retain,assign等,其内部会实现对应的引用技术的增加和减少,实现对应的内存管理;
而后来出现了ARC,自动引用计数,即(编译器)系统自动帮你计算引用值,不用你程序员去计算了。
由此,大大减少了程序员本身的,在引用计数(所涉及的底层的内存管理)方面的工作量了。
再简单的说就是,把内存管理方面的活,从程序员身上,转到编译器身上了。
ARC的引入时间,和不同版本的系统的支持程度
借用Mac官网的解释:
ARC is supported in Xcode 4.2 for OS X v10.6 and v10.7 (64-bit applications) and for iOS 4 and iOS 5. Weak references are not supported in OS X v10.6 and iOS 4.
即:
OS X 10.6/10.7 + Xcode 4.2 + iOS 4/5 之后的版本,都是支持ARC的。
其中OS X 10.6 + iOS 4,不支持弱引用。
对应的新版本的Xcode中,当你建立新的iOS项目的时候,也就会出现对应的选项“Use Automatic Reference Counting”的,
举例为:之前折腾:
参考教程开发iOS的第二个app:Storyboards – BirdWatching
中的:
ARC的好处
因此,对于开发人员来说,算是减少了在内存管理方面的工作量了。
更详细点说是,之前写Object-C程序时,你需要手动地,对于不同变量,使用对应修饰符,比如assign,release等,使得可以正常的引用不同的对象,增加其引用计数,管理内存的使用,
而现在,启用了ARC后,大多数时候,就不需要再使用这些修饰符去管理引用计数了,ARC会自动帮你管理引用计数,实现管理内存的工作。
【其他更多细节,待续】
【参考资料】
1. iOS 5 Developer Technologies – Automatic Reference Counting
2. Transitioning to ARC Release Notes
转载请注明:在路上 » 【总结】iOS的自动引用计数(ARC,Automatic Reference Counting)