什么是ARC?
ARC的全称Auto Reference Counting. 也就是自动引用计数。那么,为什么要有ARC呢?
Objective C的引用计数理解起来很容易,当一个对象被持有的时候计数加一,不再被持有的时候引用计数减一,当引用计数为零的时候,说明这个对象已经无用了,则将其释放。
ARC :ARC 是编译器特性,当编译器发现retain或者alloc,自动帮我们插入内存管理代码:release,
引用计数分为两种:
-
手动引用计数(MRC)
-
自动引用计数(ARC)
比如如下ARC代码:
NSObject * obj; { obj = [[NSObject alloc] init]; //引用计数为1 } NSLog(@"%@",obj);
等同于如下MRC代码
NSObject * obj; { obj = [[NSObject alloc] init]; //引用计数为1 [obj relrease] } NSLog(@"%@",obj);
ARC它的判断准则:只要没有强指针指向对象,对象就会被释放
指针分两种:
强指针:默认情况下都是强指针,__stong(双下划线)
弱指针:__weak
__weak Person *p = []; NSLog(@"%@",p); // 错误的写法
两端循环引用的时候:
ARC:
一端用strong,另一端weak
非ARC:
一端用retain,另一端assign
ARC :总结
1>不允许调用release,retain,retainCount
2>可以重写dealloc,但是不可以调用[super dealloc];
3>@property参数
*strong:成员变量是强指针(适用于OC对象,默认的)
*weak:成员变量是弱指针(作用跟assign一样)(适用于OC对象)
*assign:非对象