属性 - Animenzzzz/Study GitHub Wiki
属性的本质
@property = ivar + getter + setter;
“属性” (property)有两大概念:ivar(实例变量)、存取方法(access method = getter + setter)。
@property NSString *firstName;
等价
- (NSString *)firstName;
- (void)setFirstName:(NSString *)firstName;
属性的关键字
assign
用于 ‘基本数据类型’、‘枚举’、‘结构体’ 等非OC对象类型
weak
一般应用:UI控件

IBOutlet中的拖线创建

strong
- OC对象类型(NSArray、NSDate、NSNumber、模型类)
- 一个对象只要有强指针引用着,就不会被销毁
copy
- 一般用在NSString*类型、block类型上
@property(copy)NSString *name1;
@property(strong)NSString *name2;
NSMutableString *str = [NSMutableString stringWithFormat:@"123"];
self.name1 = str;
self.name2 = str;
[str appendString:@"aaa"];
Name1==123
Name2==123aaa
这个写法会出什么问题: @property (copy) NSMutableArray *array;
- 添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃.因为copy就是复制一个不可变NSArray的对象;
- 使用了atomic属性会严重影响性能。
ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?
- 对应基本数据类型默认关键字是 atomic,readwrite,assign
- 对于普通的OC对象 atomic,readwrite,strong