OC @property 的参数

1、与多线程相关的两个参数: atomic、nonatomic

  • atomic: 默认值。如果写 atomic,这个时候生成的 setter 方法的代码就会被加上一把线程安全锁。(特点: 安全、效率低下)
  • nonatomic:如果写 nonatomic,这个时候生成的 setter 方法的代码不会加线程安全锁。(特点: 不安全、效率高)

ARC 和 MRC 的情况下都可以使用。一般建议使用 nonatomic

2、与生成的 setter 方法的实现相关的参数: assign、retain

  • assign:默认值。生成的 setter 方法的实现就是直接赋值
  • retain:生成的 setter 方法的实现就是标准的 MRC 内存管理代码。也就是 判断新旧对象是否为同一个对象,如果不是,则 release 旧值,retain 新值。

1、如果对象的属性是 OC 对象类型的时候,那么就使用 retain,只有出现了循环引用时,一边 retain,一边 assign。retain 只能在 MRC 机制下使用。
2、如果对象的属性是非 OC 对象类型的时候,使用 assign。assign 既能在 ARC 机制下使用,也能在 MRC 下使用。

注意:retain 参数只是生成标准的 MRC 内存管理代码,不会自动的在 dealloc 方法中生成 release 的代码,所以还需要手动的在 dealloc 方法中实现 release 代码

3、强弱指针的参数: strong、weak

  • strong:默认值,声明的指针类型是强类型的。
  • weak:声明的指针类型是弱类型的。

1、 不管是强指针还是弱指针,都是指针,都可以存储对象的地址,都可以访问对象的成员。
2、strong 和 weak 都只能在 ARC 机制下使用。
3、如果对象的属性是 OC 对象,绝大多数使用 strong。如果出现了循环引用,那么一端使用 strong,另一端使用 weak

4、与生成只读、读写的封装:readwrite、readonly

  • readwrite:默认值。代表同时生成 setter 和 getter 方法
  • readonly:只会生成 getter 方法,而不会生成 setter 方法

5、生成 setter、getter 方法名称相关的参数:setter、getter

  • 默认情况下,@property 生成的 setter、getter 方法的名字都是最标准的名字。其实我们可以通过参数来指定 @property生成的方法的名字。
  • getter = getter 方法名字,用来指定 @property 生成的getter 方法的名字
  • setter = setter 方法名字,用来指定 @property 生成的setter 方法的名字,注意:setter 方法是带参数的,所以要加一个冒号

如果使用 setter、getter 修改了生成的方法的名字,在使用点语法时,编译器会转化为调用修改后的名字的代码。

无论什么情况都不要修改 setter 方法的名字。因为默认情况下生成的方法已经是最标准的了。

当属性的类型是一个 BOOL 类型的时候,就修改这个 getter 的名字以 is 开头,提高代码的阅读性。

@property (nonatomic, assign, getter=isShow) BOOL show;

5、使用参数注意

  • 1、同一组参数只能使用一个。setter、getter 可以同时使用。
  • 2、参数的顺序可以随意。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值