iOS 属性关键字

1. 读写权限

  • readonly:只读属性;
  • readwrite:可读可写(默认);

2. 原子性

  • atomic:原子性(系统默认);
  • nonatomic:非原子性

atomic修饰的一定是线程安全吗?看这里

3. 引用计数

  • retain/strong:修饰对象, 分别用在MRC和ARC环境下, 引用计数+1;
  • assign:可以修饰基本数据类型和对象;
  • unsafe_unretained:在明确对象的生命周期的时候,可以使用unsafe_unretained替代weak,可以略微提升性能;
  • weak:修饰对象;常用于修饰代理解决循环引用问题;
  • copy:开发中用于修饰block, NSString, NSArray等;知识点

4. assignweak对比

assign weak
可以修饰基本数据类型和对象 只能修饰对象
修饰对象的时候不会改变其引用计数 修饰对象的时候不会改变其引用计数
会产生悬垂指针,所修饰对象被释放后指针仍然指向原地址,如果访问可能会产生内存泄漏 所修饰对象被释放后会自动置为nil


补充:MRC下重写retain修饰的变量的setter方法
@property (nonatomic, retain) NSString *name;

- (void)setName:(NSString *)name {
      if (_name != name) {
        [_name release];
        _name = [name retain];  
    }
  }
 //判断_name! = name是否有必要? 有必要; 如果不判断直接走里面的逻辑, 那么有可能_name直接被release掉了, 下面再调用_name会出现不可预知问题;

参考文章
iOS unsafe_unretained 的理解和使用
iOS weak修饰符的实现原理
iOS 常用属性的关键字的使用说明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容