因为是区别在于线程安全所以勉强可以算作是个多线程的面试题吧
atomic是原子性操作,也是所谓的线程安全
nonatomic是非原子操作,本质是必须加锁才能线程安全
if (!atomic) {oldValue = *slot;*slot = newValue;
} else {spinlock_t& slotlock = PropertyLocks[slot];slotlock.lock();oldValue = *slot;*slot = newValue; slotlock.unlock();
}
其实也不用过多解释,看源码就知道了,这里会判断是否是atomic,是的话,就加把锁,同一时间只能一个线程进行修改
不建议用atomic,因为哪怕正常的调用也会加锁了,这代码效率就很低了,哪里需要就哪里加锁就好l