1、ARC 模式下 @property 参数的转变
(1)在之前手动管理内存学习中,我们用到以下用法:
@property (nonatomic, retain) Person *person;
@property (nonatomic, assign) int age;
1> retain : release 旧值,retain新值(适用于OC对象类型)。
2> assign : 直接赋值(默认,适用于非OC对象类型)。
(2)现在在ARC模式下:我们改用以下用法:
@property (nonatomic, strong) Person *person;
@property (nonatomic, weak) int age;
(3)先总结ARC特点,再作分析
1> 不允许调用release、retain、retainCount、autorelease。
2> 允许重写dealloc,但是不允许调用[super dealloc]。
3> @property参数
-
- strong : 成员变量是强指针(适用于OC对象类型)
- weak : 成员变量是弱指针,相当于(注:相当于并不代表二者完全相同)原来的assign(适用于OC对象类型)
- assign:适用于非OC对象类型
4> 以前(手动管理)的retain改为现在(ARC)用strong,其它不变
2、@property中 strong 和 weak 的使用
(1)strong的使用
@property (nonatomatic, strong) Dog *dog;
这句代码中:
1> 使用强指针 strong 代替了手动管理中的 retain。
2> strong 具有 retain 的所有功能。
3> strong 可以将成员变量 _dog 变为强指针。
声明两个类:Person Dog
想让人拥有一条狗,可以这么写
在ARC模式下,只要有strong,成员变量就是强指针。
第1例:
第2例:
第3例:
第4例:
(2)weak的使用
@property (nonatomatic, weak) Dog *dog;
这句代码中:
1> 使用弱指针 weak 代替了手动管理中的 assign。
2> weak 具有 assign 的所有功能。
3> weak 可以将成员变量 _dog 变为弱指针。