什么是ARC?spa
ARC的全称Auto Reference Counting. 也就是自动引用计数。那么,为何要有ARC呢?指针
Objective C的引用计数理解起来很容易,当一个对象被持有的时候计数加一,再也不被持有的时候引用计数减一,当引用计数为零的时候,说明这个对象已经无用了,则将其释放。code
ARC :ARC 是编译器特性,当编译器发现retain或者alloc,自动帮咱们插入内存管理代码:release,对象
引用计数分为两种:blog
手动引用计数(MRC)内存
自动引用计数(ARC)编译器
好比以下ARC代码:it
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:非对象