全称叫 ARC(Automatic Reference Counting)。
简单地说,就是代码中自动加入retain/release,原先需要手动添加的用来处理内存管理的引用计数器的代码可以自动由编译器完成。
2、ARC的优点
a)不需要手动的内存管理,减少了不必要的工作量。无需担心内存泄露;
b)减少了代码的总量 ,看上去更加整齐美观;
3、在使用ARC的工程中,如何处理未使用ARC功能的源文件
对于老的源代码需要手动修改,取消ARC功能。因为ARC的工程里默认是全部使用ARC的。
设置方法见下图:
或使用Xcode的自动转换成ARC格式工具进行修改。
操作流程:
单击菜单的Edit---单击Refactor---单击Convert to Objective-C ARC
最后点击save按钮结束。
4、ARC释放内存的判断准则
只要没有强指针指向对象,就会释放对象。
强指针与弱指针的创建方式:
__weak Person *p1; // p1为弱指针
__strong Person *p2; // p2为强指针
Person *p3; // p3为强直阵
如果没有在类名前加入__weak或__strong则指针默认为强指针。
5、ARC的特点
1> 不允许调用release、retain、retainCount
2> 允许重写dealloc,但是不允许调用[super dealloc]
3> @property的参数
* strong :成员变量是强指针(适用于OC对象类型)
* weak :成员变量是弱指针(适用于OC对象类型)
* assign : 适用于非OC对象类型
4> 以前的retain改为用strong
5> 假如两种类的存在循环引用的情况,其中一个的成员对象指针应设置成weak
6、property的使用要点
a)set方法内存管理相关的参数
retain : release旧值,retain新值(适用于OC对象类型)
assign :直接赋值(默认,适用于非OC对象类型)
copy : release旧值,copy新值
strong:在使用ARC是生成强指针指向的对象
weak:在使用ARC是生成弱指针指向的对象
b)是否要生成set方法
readwrite : 同时生成setter和getter的声明、实现(默认)
readonly :只会生成getter的声明、实现
c)多线程管理
nonatomic : 性能高 (一般就用这个)
atomic : 性能低(默认)
d)自定义getter和settter的方法名
写成:getter = ****** 和 setter = ******: (需要注意setter的名字最后一定要有“:”冒号。)
书写格式举例:
@property (getter = isRich) BOOL rich;
@property (nonatomic, assign, readwrite) int weight;
@property (readwrite, assign) int height;
@property (nonatomic, assign) int age;
@property (retain) NSString *name;