属性是结构体对象,编译期,编译器自动合成属性的get,set方法,并向类结构体里添加 “_属性名” 实例变量。类对象用.语法访问属性时调用的是ge方法,_属性名访问时访问的是实例变量。
特性:
原子性:不同线程不能同时读写
读写权限
内存管理语义:(属性与类对象之间的协议)
assign数字类型(如 CGFloat,NSInteger)的简单赋值
strong:属性设置新值时,set方法先保留新值,释放旧值,再设置新值。
weak:同assign类似,简单赋值,属性指向的对象不存在时置为nil
unsafe_unretained:同weak,对象不存在时不会自动置为nil,不安全
copy:设置新值时,set方法拷贝新值。mutable类型的属性都应该设置为copy属性
在对象外部访问属性用getter方法,内部用实例变量。在类对象的init方法里面不能调用setter,getter方法
访问实例变量不会触发属性的内存管理语义,不会触发KVO