----------------------ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
三、关于ARC(Auto reference counting)自动引用计数
1、基本简介
ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。你不再需要担心内存管理,因为编译器为你处理了一切
ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器。因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化
2、当你在编译程序的时候提供自动管理内存的功能,它会自动加入内存的控制代码,控制对象的生命周期,大大简化了内存管理的步骤,ARC管理内容的原理就是,编译器会在适当的地方自动插入retain、release和autorelease消息,要使用此方法,可以在Xcode中创建项目时勾选
如图:
在新建MAC的命令行程序时:
当在创建IOS工程时:
3、垃圾回收机制
类似与java中的垃圾回收机制,Objective-c在2.0以后也提供了垃圾回收机制,但是在IOS 中并不支持。但是我们要明白的是垃圾回收机制并不是ARC,ARC也是需要管理内存的,只不过是隐式的管理内存
4、基本原理
(1)指针分类:
强指针:默认的情况下,所有的指针都是强指针,关键字strong
弱指针:_ _weak关键字修饰的指针
声明一个弱指针如下:
_ _weak Person *p;
ARC中,只要弱指针指向的对象不在了,就直接把弱指针做清空操作。
_ _weak Person *p=[[Personalloc] init];//不合理,对象一创建出来就被释放掉,对象释放掉后,ARC把指针自动清零。
ARC中在property处不再使用retain,而是使用strong,在dealloc中不需要再[superdealloc]。
@property(nonatomic,strong)Dog *dog;// 意味着生成的成员变量_dog是一个强指针,相当于以前的retain。
如果换成是弱指针,则换成weak,不需要加_ _。
(2)规则:ARC 的规则非常简单:只要还有一个强指针变量指向对象,对象就会保持在内存中
(3)强指针和弱指针
默认所有实例变量和局部变量都是Strong指针
弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误
5、使用注意
(1)不能调用release、retain、autorelease、retainCount
(2)可以重写dealloc,但是不能调用[super dealloc]
(3)@property :想长期拥有某个对象,应该用strong,其他对象用weak
(4)其他基本数据类型依然用assign
(5)两端互相引用时,一端用strong、一端用weak
----------------------ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------