通常在声明一些成员变量时会看到如下声明方式:
@property (参数1,参数2) 类型 名字;
这里我们主要分析在括号中放入的参数,主要有以下三种:
setter/getter方法(assign/retain/copy/weak)
读写属性(readwrite/readonly)
atomicity(nonatomic)
其中各参数说明如下:
assign
默认类型,setter方法直接赋值,而不进行retain操作,基本数据类型用
retain
setter方法对参数进行release旧值,再retain新值,如下代码:
- -(void) setObj:(ClassX*) value
- {
- if (obj != value)
- {
- [obj release];
- obj = [value retain];
- }
- }
copy
setter方法进行Copy操作,与retain一样,一般NSString和block用
nonatomic
禁止多线程,变量保护,提高性能,非原子属性
atomic
,性能不高,原子属性
原子属性,系统会为该属性加锁,性能不高
readwrite
产生setter\getter方法
readonly
只产生简单的getter,没有setter。