OC中,ARC机制下类的属性的定义

来源:互联网 发布:知乎提问后自己找不到 编辑:程序博客网 时间:2024/04/30 03:50
1.属性
  • 属性时OC的一项特性,用于封装对象中的数据
  • @property基于严格的命名规范
  • 优点:
    • 使用点语法和存取方法效果相同
      • 使用属性,编译器会自动编写访问这些属性所需的方法,该过程由编译器在编译器执行
  • 禁止编译器自动合成存取方法
    • 自己实现存取方法
    • 使用@dynamic关键字,该关键字会告诉编译器:
      • 不要自动创建实现属性所用的实例变量
      • 不要为其创建存取方法。编译器确定运行期一定能找到这些方法
2.属性特质(关键字)
  • 特制的设定会影响编译器所生成的存取方法
  • 特质分类
    • 原子性:默认情况下,邮编一起所合成的方法会通过锁定机制确保其原子属性
      • nonatomic:非原子的,不使用同步锁
      • atomick:原子的,使用同步锁
    • 读写权限:
      • readwrite:可读写,属性拥有getter/setter方法
      • readonly:只读,属性只由获取方法
    • 内存管理语义:所有权语义
      • assign:其设置方法只会执行针对“纯量类型”的简单赋值操作
      • strong:“拥有关系”,其设置方法先保留新值,并释放旧值,然后再将新值设置上去
      • weak:“非拥有关系”,类似于assign,但在属性所知的对象遭到销毁时,属性值也会清空(=nil)
      • unsafe_unretained:跟assign相同,但它适用于“对象类型”,对象销毁时没有赋空操作
      • copy:所属关系与strong类似,然而设置方法并不保留新值,而是将其copy。经常用此特质保护其封装性
    • 方法名:
      • getter=<name>:指定“获取方法”的方法名
      • setter=<name>:指定“设置方法”的方法名
  • 注意:所有的属性都声明为nonatomic,因为在iOS中使用同步锁的开销很大,这会带来性能问题,atomic并不能保证线程安全。


要点
  • 可以用@property语法来定义对象中所封装的数据
  • 通过“特质”来指定存储数据所需要的正确语义
  • 在设置属性所对应的实例变量时,一定要遵从该属性所声明的语义
0 0
原创粉丝点击