在Objective-C中,您可以区分原子性质和非原子性质:
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
根据我的理解,您可以安全地从多个线程读取和写入定义为原子的属性,而同时从多个线程写入和访问非原子属性或ivars可能会导致未定义的行为,包括严重的访问错误。
因此,如果您在Swift中有这样的变量:
var object: NSObject
我可以安全地并行读写该变量吗?(不考虑这样做的实际含义)。
atomic
一句,除了简单的数据类型外,通常认为不足以实现与属性的线程安全交互。对于对象,通常使用锁(例如,NSLock
或@synchronized
)或GCD队列(例如,具有“读写器”模式的串行队列或并发队列)来同步跨线程的访问。
atomic
不能确保对象的线程安全性;(b)如果一个人正确地使用上述同步技术之一来确保线程安全(尤其是防止同时读/写),则根本的问题就不那么重要了。但是我们仍然需要/想要atomic
具有实际价值的简单数据类型。好问题!
@atomic
或@nonatomic
。或默认情况下只是原子的。(迅速发展还不完善,我们现在不能说太多了)