1、与多线程相关的两个参数: atomic、nonatomic
- atomic: 默认值。如果写 atomic,这个时候生成的 setter 方法的代码就会被加上一把线程安全锁。(特点: 安全、效率低下)
- nonatomic:如果写 nonatomic,这个时候生成的 setter 方法的代码不会加线程安全锁。(特点: 不安全、效率高)
2、与生成的 setter 方法的实现相关的参数: assign、retain
- assign:默认值。生成的 setter 方法的实现就是直接赋值
- retain:生成的 setter 方法的实现就是标准的 MRC 内存管理代码。也就是 判断新旧对象是否为同一个对象,如果不是,则 release 旧值,retain 新值。
3、与生成只读、读写的封装:readwrite、readonly
- readwrite:默认值。代表同时生成 setter 和 getter 方法
- readonly:只会生成 getter 方法,而不会生成 setter 方法
4、生成 setter、getter 方法名称相关的参数:setter、getter
- 默认情况下,@property 生成的 setter、getter 方法的名字都是最标准的名字。其实我们可以通过参数来指定 @property生成的方法的名字。
- getter = getter 方法名字,用来指定 @property 生成的getter 方法的名字
- setter = setter 方法名字,用来指定 @property 生成的setter 方法的名字,注意:setter 方法是带参数的,所以要加一个冒号
@property (nonatomic, assign, getter=isShow) BOOL show;
5、使用参数注意
- 1、同一组参数只能使用一个。setter、getter 可以同时使用。
- 2、参数的顺序可以随意。