最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【总结】iOS的自动引用计数(ARC,Automatic Reference Counting)

iOS crifan 2484浏览 0评论

下面总结一下,关于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)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.163 seconds, using 22.10MB memory