![Objective-C RunTime 学习笔记 之 atomic/nonatomic 关键字 Objective-C RunTime 学习笔记 之 atomic/nonatomic 关键字](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
atomic修饰的是变量/方法,对于可变对象的指针变量是安全的,内部实现加了锁,但是对可变对象本身没什么影响,不安全还是不安全。另外atomic仅仅对编译器生产的getter、setter有效,如果自定义了getter、setter则还需要自己加锁。可以使用OSAtomicXXX函数来进行正数操作或者GCC的buildin函数来进行原子操作。
如果没有实现自定义的getter / setter,实际上iOS 调用了
objc_getProperty_non_gc / reallySetProperty / objc_copyStruct 内部使用自旋锁加锁。
如果自定义了getter setter 控制权完全交给了程序员自己,即便你使用了atomic修饰符号。