ARC知识介绍
(1)概念:ARC的全称是Automatic Reference Counting (自动引用计数),是自IOS5之后增加的新特性,编译器会自动在合适的地方插入适当的retain、release、autorelease语句,会自动生成内存管理的代码,不用程序员手动编写。
(2)如果是手动管理内存,可以简称MRC(Manual Reference Counting)
(3)作用:编译器自动管理内存地址,让程序员更加专注于APP的业务。
(4)好处:基本上能够避免内存泄漏
(5)强指针:默认所有指针变量都是强指针;被__strong修饰的指针。
(6)弱指针:被__weak修饰的指针
(7)ARC中的@property参数
1.strong:用于OC对象,相当于MRC中的retain
2.weak:用于OC对象,相当于MRC中的assign
3.assign:用于基本数据类型,跟MRC中的assign一样
4.copy:一般用于NSString,跟MRC中的copy一样
(8)工作原理:只要还有一个强指针变量指向对象,对象就会保持在内存中。
如:
ARC环境引用
在Person.h 和 Dog.h 中不能都声明strong:
@property (nonatomic, strong) Dog *dog;
@property (nonatomic, strong) Person *person;
一端用strong,一端用weak,不限制谁用weak,这样弱指针指向的对象会先销毁,另一端若没有指针指向,则也会销毁。
@property (nonatomic, strong) Dog *dog;
@property (nonatomic, weak) Person *person;
所以,当两端循环引用的时候,解决方案:
ARC:
1端用strong,1端用weak
非ARC:
1端用retain,1端用assign
(9)ARC特点总结:
1)、不允许调用release、retain、retainCount。
2)、允许重写dealloc,但是不允许调用[super dealloc]。