属性可以拥有的特质分为四类:
1.原子性---- nonatomic
2.读/写属性 ---- readwrite(读写) readonly(只读)
3.内存管理--- strong weak assign copy retain unsafe_unretained
4.方法名--- getter<name> setter<name>
readwrite: 产生setter\getter方法
readonly: 只产生简单的getter,没有setter。
assign: 默认类型,setter方法直接赋值,而不进行retain操作 ;用于值类型,如int、float、double和NSInteger,CGFloat等表示单纯的复制。还包括不存在所有权关系的对象,比如常见的delegate。
retain: setter方法对参数进行release旧值,再retain新值。在setter方法中,需要对传入的对象进行引用计数加1的操作。简单来说,就是对传入的对象拥有所有权,只要对该对象拥有所有权,该对象就不会被释放。
copy: setter方法进行Copy操作,与retain一样;与strong类似,但区别在于实例变量是对传入对象的副本拥有所有权,而非对象本身。
weak:在setter方法中,需要对传入的对象不进行引用计数加1的操作。简单来说,就是对传入的对象没有所有权,当该对象引用计数为0时,即该对象被释放后,用weak声明的实例变量指向nil,即实例变量的值为0。delegate outle;
strong:表示实例变量对传入的对象要有所有权关系,即强引用。strong跟retain的意思相同并产生相同的代码,但是语意上更好更能体现对象的关系。
nonatomic: 禁止多线程,变量保护,提高性能
网友评论