@property参数

来源:互联网 发布:阿里免费云空间 编辑:程序博客网 时间:2024/05/18 19:44
  • @property的作用

    • . 自动生成私有属性.
    • . 自动生成私有属性的getter setter方法的声明.
    • . 自动生成私有属性的getter setter方法的实现.

      • 生成的setter实现: 都是直接赋值.

  • . @property参数.

    • . 可以带参数.

    • . @property(参数1,参数2,参数3….) 数据类型 名称;

    • . @property参数主要分为如下四类.

      • . 与多线程相关的.
        atomic nonatomic

      • . 与生成的setter方法实现相关的
        assign retain

      • . 生成的getter setter 是可读写的还是只读的封装.
        readwrite readonly

      • . 修改生成的getter setter方法的名称

        • setter getter

  • . 与多线程相关的参数

    • 默认值是atomic 如果不写这两个参数中的1个 那么默认就是atomic。

    • atomic: 生成的set方法的实现就是加了线程安全锁的.

      • 安全性高. 但是效率相对较低.
    • nonatomic:生成的set方法的实现没有加线程安全锁.

      • 安全性低 但是效率相对较高
    • 推荐使用nonatomic 因为这样效率更高一些.


  • . 与生成的setter方法的实现相关的参数

    • 默认值是assign

    • assign: 生成的setter方法的实现就是直接赋值.

    • retain: 生成的setter方法的实现就是标准的MRC内存管理代码.

    • 属性的类型是OC对象的时候 就使用retain

    • 属性的类型是非OC对象的时候 就使用assign

  • 生成的是只读封装还是读写封装

    • 默认值是: readwrite

    • readwrite: 同时生成属性的getter和setter

    • readonly: 只生成getter 而不生成setter

  • 修改生成的getter setter方法的名称

    • 默认情况下,@propert生成的getter setter方法的名称都是按照规范来生成的.

    • 使用参数getter或者setter可以修改生成的getter方法和setter方法的名称.

    • 虽然可以使用参数来更改生成的getter、setter方法的名称但是没事别乱改.

      • 因为这样的话 方法名就不遵守规范了.

  • 注意的问题

    • . 如果我们使用getter setter参数修改了生成的getter setter方法名称.
    • 点语法仍然可以正常使用.
    • 会自动的将点语法转换为调用修改名称以后的方法.

    • . setter方法的名称永远都不要改.

    • . 当属性的类型是1个BOOL类类型的时候.

      • 为了让我们的代码语义看起来更符合人类的思维.
      • 所以我们修改这个属性的getter名称 以isXXX开头.

  • . 使用大注意.

    • retain只是生成的set方法是标准的MRC内存管理代码.
    • 不会在dealloc中生成release
    • 所以,我们还要手动的在dealloc中写上release的代码.

  • . 参数使用总结

    • . 同1组的参数只能使用其中的1个.否则就会冲突.

      • 但是getter和setter可以同时使用 这个不冲突.
    • . 使用建议.

      • . 无论如何使用nonatomic
      • . 如果属性的类型是OC对象类型使用retain 如果属性类型是非OC类型使用assign
      • . 如果希望可读可写 就使用readwrite 如果希望只读 就使用readonly
    • . 无论如何不要去修改setter的名称 只有在属性的类型是BOOL类型的时候才去修改getter的名称为isXXX.
0 0