Objective-C属性修饰符
Objective-C 2.0引入了新的语法以声明变量为属性,并包含一可选定义以配置访问方法的生成。
属性总是为公共的,其目的为提供外部类访问类的内部变量的方法。
- 读写属性:readonly只读 readwrite读写(默认)
- 存储属性: assign,copy,retain 简单的赋值、复制、增加引用计数
- 原子性:atomic原子的,nonatomic非原子的避免产生锁
strong和weak是ARC带出来的关键词
strong 增加引用计数,weak不增加引用计数。
weak和assign的区别:weak地址被释放时自动设置为nil,而assign则不会主动设置为nil,有可能会造成野指针。
assign通常用于普通类型属性
像delegate属性建议用weak修饰而不是assign。
strong和retain的区别:
他俩都是强引用,除了某些情况下不一样,其他的时候也是可以通用的。
在修饰block属性的时候,相信大家都知道要用copy,如果不copy的话,他的生命周期会随着函数的结束而结束,copy之后会放在堆里面,延长block的生命周期。
strong在修饰block的时候就相当于copy,而retain修饰栈block的时候就相当于assign,这样block会出现提前被释放掉的危险。
@synthesize关键字 表示属性的属性会自动产生一对访问方法。
@dynamic关键字 表示访问方法会由程序员手工提供。
网友评论