属性的特性
任何属性都有一组特性,用于描述相应存取方法的行为,如下
1 | //OC |
多线程特性
多线程特性有两种可选类型:nonatomic
和atomic
,分别代表单线程和多线程。
nonatomic
不是默认类型所以在声明属性时必须明确的写出nonatomic
。
读/写特性
读/写特性也有两种可选类型:readwrite
和readonly
,分别代表读写和只读。其中readwrite
是默认类型。
内存管理特性
内存管理特性有四种可选类型:strong
、weak
、 copy
、 unsafe_unretained
,这些类型决定相应的实例变量将如何引用对象。
strong
为默认类型。ARC自动+1。
weak
是为了避免引用循环。对象销毁指针也自动销毁。
copy
类似于下面这个代码,它会将传入的值先复制一遍,_name
指向新的复制的对象。
1 | //OC |
这样做是因为,如果熟悉指向的对象类有可修改的子类,那么属性可能会指向可修改的子类对象,同时该对象可能会被其他拥有者修改,因此先复制该对象,再将属性指向复制后的对象。
unsafe_unretained
这种类型指针指向的对象被销毁时,指针不会自动设置为nil,而是成为空指针,所以不安全。