02 iOS中属性@property的用法

184 阅读1分钟

####1. @property属性的用法

  • weak(assign) :  代理\UI控件
  • strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)
  • copy : 字符串(NSString\NSMutableString\block)
  • assign : 非对象类型(基本数据类型int\float\BOOL\枚举\结构体)

####2. 原子和非原子属性

  1. 原子和非原子属性
  • OC在定义属性时有nonatomic和atomic两种选择

    • atomic:原子属性,为setter方法加锁(默认就是atomic)
    • nonatomic:非原子属性,不会为setter方法加锁
  • atomic加锁原理

@property (assign, atomic) int age;
-(void)setAge:(int)age {
      @synchronized(self) {
          _age = age;
      }
}
  1. 原子和非原子属性的选择
  • nonatomic和atomic对比

    • atomic:线程安全,需要消耗大量的资源
    • nonatomic:非线程安全,适合内存小的移动设备
  • iOS开发的建议

    • 所有属性都声明为nonatomic
    • 尽量避免多线程抢夺同一块资源
    • 尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减小移动客户端的压力