@property的属性

本文详细介绍了Objective-C中属性声明的基本语法及其三个核心参数:读写属性(readwrite/readonly)、setter语意(assign/retain/copy)及原子性(atomic/nonatomic)。通过具体的示例解释了如何使用这些参数来管理对象的内存、实现线程安全以及定制getter和setter方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明property的语法为:
@property (参数,参数,...) 类型 名字;

这里的参数主要分为三类:
读写属性(readwrite/readonly)
setter语意(assign/retain/copy)
原子性(atomic/nonatomic

如果是基本数据类型,我们可以省略不写这些属性。

1.读写属性

@property (readwrite) int age;//代表这句会帮你生成getter方法和setter方法!这个是默认的属性!

@property (readonly) int age;//代表这句只会帮你生成getter方法。没有setter方法!

2.setter语意

assign

此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是可拷贝的。

retain

oc对象一定要用retain!说白了就是对OC对象内存管理。

@property (retain)Book *book;   //Book是一个OC对象

retain  释放旧值,增加新值的retaincount,适合处理对象和无垃圾回收器时使用。在有垃圾回收器时,和assign效果相同。所以retain比assign更适合广泛的情况,有无垃圾回收器都可以使用。

copy

它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。更深入的讨论,请参考复制部分。

3.原子性

原子性提供了线程安全。加了atomic就代表给方法加锁。nonatomic代表方法不需要考虑线程安全问题。atomic是要消耗一定的性能。默认所有的property属性都是atomic。但我们在实际用的时候基本大部分是用nonatomic!

4.另:

@property (nonatomic,getter = isRich)BOOL rich;

这是在指定getter要调用的方法,同理,setter方法也可以这么玩。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值