文章目录
  1. 1. 原子性
  2. 2. 读/写权限
  3. 3. 内存管理语义

属性的存取方法有着严格的命名规范,正因为这样才可以用@property语法。@property会帮你自动生成一套存取方法。要访问属性可以使用“点语法”,编译器会自动的把“点语法”转换为对存取方法的调用,所以使用点语法跟使用存取方法没有丝毫差别。

属性可以拥有的特质(attribute)可以分为4类

原子性

atomic nonatomic

读/写权限

readwrite readonly

内存管理语义

  • assign
    只会执行针对“纯量类型”(scalar type, 例如CGFloat或NSNumber等)的简单赋值操作。

  • strong
    表明该属性定义了一种“拥有关系”。为这种属性设置新值时,设置方法会先保留新值,并释放旧值,然后再将新值设置上去。

  • weak
    表明该属性定义了一种“非拥有关系”。为这种关系设置新值时,设置方法既不保留新值也不会释放旧值。在属性所指的对象被摧毁时,属性也会被清空(nil)

  • unsafe_unretained
    语义跟assign类似,单它试用与“对象类型”,当对象被摧毁时,值不会被清空。这一点跟weak不一样。

  • copy
    与strong类似,设置方法不保留新值,而是将其copy。

在对象内部读取数据时,应该直接通过实例变量来读,而写入数据时应通过属性来写
在初始化方法及dealloc方法中,总是应该通过实例变量来读写数据
有时会通过惰性初始化来配置数据,这种情况下需要通过属性来读取数据

文章目录
  1. 1. 原子性
  2. 2. 读/写权限
  3. 3. 内存管理语义