壹:@property的内存管理策略
@property 的本质:
@property = ivar + getter + setter;
“属性” (property)有两大概念:ivar(实例变量)、存取方法(access method = getter + setter)。
我们都知道, @property修饰符, 系统会给类声明的属性声明默认 (最简单的) 的setter和getter方法.
一般它有如下四个作用:
1.控制set方法的内存管理
①MRC下, @property的内存管理策略:
- retain : release旧值,retain新值(用于OC对象)
- assign :直接赋值,不做任何内存管理 (默认,用于非OC对象类型)
- copy : release旧值,copy新值(一般用于NSString *和block)
②ARC下, @property的内存管理策略 (重点掌握) :
- copy : NSString *和block对象
- strong : 除NSString\block以外的OC对象, 强指针引用过, 防止对象被销毁
- weak : 当两个对象互相引用时, 一端用strong, 一端用weak, 防止循环引用
- assign : 基本数据类型
2.控制需不需要生成set方法