iOS开发多线程篇---atomic nonatomic区别
atomic :默认是有该属性的,这个属性是为了保证程序在多线程情况下,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。 nonatomic :如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。 atomic的意思就是setter/getter这个函数,是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行完setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样,可以保证数据的完整性。 nonatomic不保证setter/getter的原语行,所以你可能会取到不完整的东西。因此 ,在多线程的环境下原子操作是非常必要的,否则有可能会引起错误的结果。 比如setter函数里面改变两个成员变量,如果你用nonatomic的话,getter可能会取到只更改了其中一个变量时候的状态,这样取到的东西会有问题,就是不完整的。当然 如果不需要多线程支持的话,用nonatomic就够了,因为不涉及到线程锁的操作,所以它执行率相对快些。 下面是载录的网上一段加了atomic的例子: {lock} if (property != newValue) { [property release]; property = [newValue retain]; } {unlock} 可以看出来