第六段 理解属性这一概念
什么是对象? 类的实例化。
什么是类? 具有相同事物特征的统称。
对象是面向对象编程的基本构造单元。对象可以存储并传递数据。
对象与对象之间的数据传递并执行任务的过程,就叫做消息传递。
而runtime 就是实现消息传递的函数。
属性是OC的一项特性,用于封装对象中的数据。 OC对象通常把数据保存成各种实例变量,而通过存取方法来访问对象。 点语法比较直观的对对象进行存取操作。
@property 编译器自动写出一套存取方法,用来访问给定类型中具有给定名称的变量。
@synthesize 用来指定实例变量的名字
nonatomic 非原子性,不使用同步锁。
atomic 原子性 缺点影响性能 举例,当两个线程读写同一属性时,无论何时,总能看到有效的属性值,不加锁(即nonatomic)的情况下,一个线程设置值,另一个线程刚好读值,那么尚未修改好的属性值读取出来,发生这情况,那线程读的属性值就不对了。 正常情况下也都是使用非原子性,第一考虑性能问题(同步锁开销太大),第二点就是一个线程连续多次读取某个属性值过程中,别的线程同时修改该值,即便你声明原子性,也还是会读到不同值。
readwrite 读/写权限
readonly 只读 可在头文件携程只读,在分类中,就是在实现文件内写成可读可写
特质:
assign 基本用在CGFloat 或者NSInteger “纯量类型”
strong 拥有关系,属性在设置新值时,保留新值,释放旧值,然后把新值设置上去 用于各种view,数组等
weak 非拥有关系,属性设置新值时,既不保留新值,也不释放旧值 与assign 类似,在属性所指的对象遭到摧毁时,属性值也会清空。就是指向nil
unsafe_unretained 此特质语义和assign相同 适用于对象类型 非拥有关系 unretained表示不保留 当目标对象被摧毁时,属性值不会清空(unsafe) 这点和weak不一样
copy 所属关系与strong相似 然而在设置方法并不保留新值,而是将其拷贝