iOS 属性关键字

作者: 飞不越疯人院 | 来源:发表于2019-04-11 21:53 被阅读3次

    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 常用属性的关键字的使用说明

    相关文章

      网友评论

        本文标题:iOS 属性关键字

        本文链接:https://www.haomeiwen.com/subject/ivkfwqtx.html