我真的很喜欢@ synchronized-construct而不是使用NSLocks,当我想要一次只能读取或写入一个数据结构时。但是,当我想更改整个对象时,我们是@synchronizing,我不确定@synchronized是否合适。我想知道的是,这些是否以同样的方式运作:
// version 1:
// segment 1:
@synchronized(self.obj) {
self.obj = obj2;
}
// segment 2:
@synchronized(self.obj) {
// some other stuff
}
// version 2:
// segment 1:
[objLock lock];
self.obj = obj2;
[objLock unlock];
// segment 2:
[objLock lock];
// some other stuff
[objLock unlock];
答案 0 :(得分:1)
相反,您可以设置不带nonatomic
的属性。缺少nonatomic
表示atomic
。
默认情况下,属性是原子的,因此合成访问器提供对多线程环境中属性的强大访问 - 也就是说,无论其他线程同时执行什么,始终完全检索或设置从getter返回的值或通过setter设置的值。
有关详细信息,请参阅Apple documentation
答案 1 :(得分:0)
NSLock
和@synchronized
来电基本相同,几乎可以互换。有一些细微的差别,你可能不需要关心这样一个简单的实现 - 但是要阅读它们,因为它有点有趣!
这里有一个很好的答案,比较两者:How does @synchronized lock/unlock in Objective-C?