------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
自动回收内存机制。
优点:不需要人为添加内存管理代码,提高了编程效率与安全性。
1.概念:编译器会自动在适当的地方插入适当的retain、release、autorelease语句。(属于编译器特性)
2.ARC的判断标准:
只要没有强指针指向对象,就会释放对象。
eg: Person *p = [[Person alloc] init];
p = nil;
代码解析:默认情况下,p是强指针。当p等于空时,就没有强指针指向Person对象,这时候编译器会自动将Person对象销毁。
(1)强指针:默认情况下,指针都是强指针(__strong)
(2)弱指针: __weak 修饰
eg: __weak Person *p2 = p ; (p2就是个弱指针)
3. ARC特点:
(1)不允许手工调用release、retain、autoretain。
(2)允许重写dealloc,但是不允许调用[super dealloc];
(3)@property参数
strong:成员变量是强指针,相当于以前retain(使用OC对象)
weak:成员变量是弱指针,相当于以前assign(使用OC对象)
assign:基本数据类型,直接赋值。(使用非OC对象)
(4)以前的retain,全部改为strong,其余不变
eg: @property (nonatomic,retain) Car *car;
改为:@property (nonatomic,strong) Car *car;
4.某.m文件不需要ARC方法
不需要ARC: 添加-fno-objc-arc
需要ARC:-f-objc-arc
5.解决循环引用问题
1>ARC
一端用strong,一端用weak
eg: Dog 端 : @property (nonatomic,strong) Person *person;
Person端:@propertor (nonatomic,weak) Dog *car
2>非ARC
一端用retain,一端用assign
eg: Dog 端 : @property (nonatomic,retain) Person *person;
Person端:@propertor (nonatomic,assign) Dog *car
6.总结
ARC最大的优点就是极大的提高了程序编写效率,开发者不需要关心对象的销毁时间,不需要担心程序的内存泄漏问题。