属性 - 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;

  1. 添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃.因为copy就是复制一个不可变NSArray的对象;
  2. 使用了atomic属性会严重影响性能。

ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?

  • 对应基本数据类型默认关键字是 atomic,readwrite,assign
  • 对于普通的OC对象 atomic,readwrite,strong