atomic/nonatomic/retain/assign/copy
nonatomic vs. atomic
"atomic" 是默认的,通常使用 "nonatomic".如果使用atomic,如其名,它会保证每次getter和setter的操作都会正确的执行完毕,而不用担心其它线程在你get的时候set,可以说保证了某种程度上的线程安全。但是,我上网查了资料,仅仅靠atomic来保证线程安全是很天真的。要写出线程安全的代码,还需要有同步和互斥机制。
而nonatomic就没有类似的“线程安全”(我这里加引号是指某种程度的线程安全保证)。因此,很明显,nonatomic比atomic速度要快。这也是为什么,我们基本上所有用property的地方,都用的是nonatomic了。retain vs. copy vs. assign
"assign" 是默认的使用 @synthesize 创建的 setter 该值将被简单地分配给属性,我的理解是,“分配”应当用于非指针属性。
"retain" 的属性需要的是一个指向对象的指针。@synthesize 所产生的二传手将对象保留(又名添加一个保留计数)。当你完成它,您将需要释放的对象。
"copy" 的属性需要的是一个可变的对象。如果你需要这个对象的当前值,但你不希望这个对象的其他拥有者修改他你可以使用 copy 。当你完成了它,您将需要释放这个对象,因为你保留他的副本。