Objective-C 编程语言(5)属性----性能与多线程

转载请标明出处: http://blog.csdn.net/zhangxingping

性能与多线程

    如果自己实现属性的访问方法,我们就必须考虑性能和多线程的问题。

    如果使用@synthesize指令有编译器自动生成属性的访问方法,那么生成访问方法取决于声明属性(Property)是指定的属性(Attributes)。与性能和线程有关的属性有retain,assign,copy和nonatomic。前三者作为setter方法的不同实现,只会影响到性能。他们对应的实现方式类似如下:

//assign
property = newValue;

//retain
if ( property != newValue )
{
    [property release]
    property = [newValue retain];
}

//copy
if (property != newValue)
{
    [property release];
    proerty = [newValue copy];
}

 

    nonatomic属性的作用和环境相关。缺省情况下,自动生成的访问方法都是原子的。在引用计数的环境中,需要使用锁机制来确保原子性,且返回的对象会被retain,并自动释放。这点在“原子性”小节中有谈到。如果频繁地调用访问方法,确保访问方法的原子性对性能将有很大的负面影响。在垃圾回收环境中,大多数自动生成的访问方法都是具有原子性的,并且对性能的影响不大。

    重要的一点是理解原子性的目的是为了提供更加又具有鲁棒性的访问方法---而不是确保代码自身的“正确性”。尽管“atomic”能确保对属性的访问做到线程安全,但是把类中所有的属性都设置为是atomic的并不意味着这个类或者说程序中的所有对象都是线程安全的。线程安全是不能在单独的访问方法级别来讨论的。更多关于多线程的信息请参见《线程编程指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值