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的并不意味着这个类或者说程序中的所有对象都是线程安全的。线程安全是不能在单独的访问方法级别来讨论的。更多关于多线程的信息请参见《线程编程指南》

发布了22 篇原创文章 · 获赞 6 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/zhangxingping/article/details/7443131