在Xcode4.2之后,Objective-C新添加一项特性:property
在@property中属性特性有3类
-
@property(多线程特性,读写特性,内存管理特性)属性类型 属性名称
- 多线程特性:nonatomic,atomic
- 读写特性:readwrite,readonly
- 内存管理特性:strong,weak,copy,unsafe-unretain,retain,assign。
多线程特性
可选项:nonatomic,atomic;默认是atomic
nonatomic非原子性访问,不加同步,多线程并发访问会提高性能,但有可能会出现数据安全问题,一般iOS开发推荐此特性,数据安全问题交给服务器去处理。
atomic代表多线程并发安全。
- 读写特性
可选项:readwrite,readonly;默认是readwrite
如果属性声明为readwrite,那么同时也会自动生成set/get方法;
如果属性声明为readonly,那么只会生成get方法,而不会生成set方法
内存管理特性
可选项:strong,weak,copy,unsafe-unretain,retain,assign;默认为strong
strong,父对象对子对象的引用一般用这种方式
weak,为了避免循环引用导致内存泄漏,一般子对象指向父对象、父父对象的引用使用此特性。
copy,为此属性赋值时,需要重新拷贝一份,赋值给属性,修改原来的哪个对象不会影响属性的值。常用于充当临时变量保存其他对象指针的属性,而且该指针是可变类型的。
unsafe-unretain,该属性所致的对象被释放的时候,该属性不会被设置为nil,而是设置为空指针。
retain,在setter方法对参数进行release旧值在retain新值
assign,表示setter方法直接赋值,不进行任何retain操作,一般用于属性为基本类型的声明。更改属性的set/get方法名
一般BOOL类型为应该以is开头,可以通过修改sex属性的get方法名
@property(nonatomic,getter = isMan )BOOL sex;
那么sex属性的get方法名为isMan。
修改set方法名类似setter = set方法名