美文网首页
iOS那些属性修饰词

iOS那些属性修饰词

作者: HeavenWong | 来源:发表于2021-11-07 18:06 被阅读0次

    最熟悉的陌生人 ? 应该是最熟悉的熟悉人🙃
    atomic, nonatomic, assign, weak, strong, copy, retain, nullable, nonnull, readwrite, readonly

    • nonatomic

      非原子属性, 非线程安全的, 对性能损耗低, 开发中一般用nonatomic, 系统默认是atomic, 所以每次都要用nonatomic去修饰属性.

    • atomic

      原子属性, 系统自动在setter和getter方法加了锁, 性能损耗高, 开发中一般不用.

    • assign

      修饰基本数据类型(NSInteger/Float/Double/Bool...), 基本数据类型分配在栈中, 内存由系统管理. 若修饰对象类型, 再访问对象会报错野指针错误, 对象类型分配在堆中, 而assign不进行强引用, 对象基本上一创建就被释放, 然而指针不为nil, 指针指向被释放了的对象就报错.

    • weak

      同样不会增加引用计数, 跟assign不同, weak只能修饰OC对象类型, 并且是弱引用, 当对象被释放的时候, 指针也会置为nil, 就不会出现野指针.一般用在修饰IBOutlet控件属性 / delegate, 而block属性对象在内部使用self或者其他强引用对象时候, 需要使用__weak弱引用

    • strong

      修饰对象类型, retain+1, 并且是在ARC环境下使用.

    • retain

      也是继续是对象类型, 只能在MRC环境下使用

    • copy

      一般修饰不可变对象, NSString/NSArray/NSDictionary等, 还修饰 block属性, 会将block对象从栈区复制一份到堆区, 避免过早释放.

    • nonnull

      对象的值不允许空

    • nullable

      对象的值允许为空

    • null_unspecified

      不设定是否非空

    实际里还有_Null_unspecified / _Nullable / _Nonnull, 意思跟对应的null_unspecified / nullable / nonnull是一样的, 只是放的位置不一样.

    • readwrite

      读写属性, 默认就是读写属性, 系统自动创建setter和getter方法.

    • readonly

      只读属性, 不允许改变属性值, 系统只创建getter方法

    相关文章

      网友评论

          本文标题:iOS那些属性修饰词

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