使用@property声明属性时,经常用到atomic与nonatomic两个关键字,默认为atomic。atomic与nonatomic决定了编译器生成的setter、getter方法是否为原子操作。如果自己写了setter、getter方法,那么atomic/nonatomic、assign/retain/strong/weak/copy等关键字仅仅起提示作用,写与不写并无区别。
atomic是Objc使用的一种线程保护技术,系统生成的getter、setter会保证get、set操作的完整性。相对nonatomic来说,atomic要更耗费资源,且速度要慢,所以在iPhone等小型设备上,如果没有用到多线程之间的通讯,那么nonatomic是更好的选择。