OC之属性



属性的出现简化了程序的代码量,并且增加了实例变量的访问安全性
属性的属性:给属性提供一些关键字,用来控制settergetter方法的实现细节
这些关键字我们称为属性
属性的attribute一共分为三大类:
第一大类:读写性的控制 readonly,readwrite,setter,getter
readonly:只读属性,告诉编译器,只声明getter方法,而没有setter方法(只能读取值,不能赋值)
readwrite:读写属性,告诉编译器既声明setter方法,又声明getter方法,readwrite是属性读写性控制的默认修饰词
第二大类:原子性的控制(atomicnonatomic
atomicsettergetter方法在多线程访问下是绝对安全的,即系统在settergetter方法内部做了很多多线程安全的处理操作。
atomic是原子性控制的默认设置
nonatomicsettergetter内部不会做过多得多线程方面的处理,仅仅是普通的setter,getter方法。
在开发过程中msettergetter方法处处都使用,如果使用atomic修饰,settergetter方法内部会做很多多线程安全的操作,会很占用系统资源,降低系统性能 所以在开发中原子性一般设置为nonatomic,只有在需要线程安全的地方才使用atomic
第三大类:语义设置(assignretaincopy
assignsetter内部是直接赋值
retainsettergetter内部实现会做内存优化
如果属性是非对象性(比如intfloat、或者构造类型:结构体),属性的语义设置使用关键字assign
如果属性是对象类型(NSStringNSArrayNSDic)属性的设置用retain
如果属性是对象类型并且想得到参数的copy,使用关键字copy
*的语义设置用retain,不带*的语义设置用assign
assign,用于基本数据类型
-(void)setA:(int)a{
_a=a;
}
retain,通常用于非字符串对象
-(void)setA:(Car *)a{
if(_a!=a){
[_a release];
_a=[a retain];
}
}
copy,通常用于字符串对象、block、NSArray、NSDictionary
-(void)setA:(NSString *)a{
if(_a!=a){
[_a release];
_a=[a copy];
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值