属性参数

转自:http://www.cnblogs.com/kenshincui/p/3870325.html#propertyParameter 崔江涛(KenshinCui)

属性参数

像上面这样编写setCar方法的情况是比较多的,那么如何使用@property进行自动实现呢?答案就是使用属性参数,例如上面car属性的setter方法,可以通过@property定义如下:

@property(nonatomic,retain) Car *car;

你会发现此刻我们不必手动实现cargettersetter方法程序仍然没有内存泄露。其实大家也应该都已经看到前面Personname属性定义的时候我们同样加上了(nonatomic,copy)参数,这些参数到底是什么意思呢?


nonatomic属性读取的是内存数据(寄存器计算好的结果)而atomic就保证直接读取寄存器的数据.

@property的参数分为三类,也就是说参数最多可以有三个,中间用逗号分隔,每类参数可以从上表三类参数中人选一个。如果不进行设置或者只设置其中一类参数,程序会使用三类中的各个默认参数,默认参数:(atomic,readwrite,assign)

一般情况下如果在多线程开发中一个属性可能会被两个及两个以上的线程同时访问,此时可以考虑atomic属性,否则建议使用nonatomic,不加锁,效率较高;readwirte方法会生成gettersetter两个方法,如果使用readonly则只生成getter方法;关于set方法处理需要特别说明,假设我们定义一个属性a,这里列出三种方式的生成代码:

assign,用于基本数据类型

-(void)setA:(int)a{
    _a=a;
}

retain,通常用于非字符串对象

-(void)setA:(Car*)a{
   
if(_a!=a){
        [_a release];
        _a=[a retain];
    }
}

copy,通常用于字符串对象

-(void)setA:(NSString*)a{
   
if(_a!=a){
        [_a release];
        _a=[a copy];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值