iOS @property的相关参数

@property的作用

当我们写下@property (nonatomic, strong) NSObject *food;编译器帮我们做了以下几件事:

  • 创建实例变量_food;(自动生成私有属性)
  • 自动生成food属性的setter、getter方法的声明。
  • 自动生成food属性的setter、getter方法的实现。

生成的setter方法的实现中,无论是什么类型,都是直接赋值。
如果多个@property的类型一致,可以批量声明。@property float height, weight;

@property的四组参数

  • 与多线程相关的两个参数:atomic、nonatomic
  • 与生成setter方法实现相关的参数:assign、retain
  • 与生成只读、读写相关的参数:readWrite、readOnly
  • 与生成的setter、getter方法名字相关的参数:getter、setter
一、atomic和nonatomic

1、atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
2、atomic:默认值,表示生成的setter、getter方法会加上一把线程锁。特点:安全,效率低下。
3、nonatomic:表示生成的setter、getter方法不会加上一把线程锁。特点:相对atomic来说不安全,但是效率比atomic高。

注意:无论是ARC和是MRC的模式下都可以使用这两个参数。建议使用nonatomic。

二、assign和retain

1、assign:默认值。当属性的类型是非OC对象时,使用assign,setter方法就是对属性直接赋值。
2、retain:当属性是OC对象的数据时,生成的setter方法的实现就是标准的MRC内存管理代码。(先判断新旧对象是否是同一个对象,如果不是,就release旧值,retain新值)。

注意:retain参数,生成的setter方法是标准的MRC内存管理代码。不会自动的在dealloc方法中生成release方法。所以还要手动的在dealloc方法中调用对象的release方法。

三、readWrite和readOnly

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

四、getter和setter

1、如果使用了setter、getter方法修改了生成的方法的名字,在使用点语法的时候,编译器会转换为修改后的名字的代码。
2、当属性的类型是一个BOOL类型的时候,可以修改这个getter方法的名字为is开头,提高代码的阅读性。

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

参数的使用注意

1、同一组参数只能使用一个,setter和getter可以同时使用
2、参数的顺序可以随意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值