我正在升级项目,并从Xcode收到以下警告
'OSMemoryBarrier'已被弃用:首先在iOS 10.0中弃用-改为使用atomic_thread_fence()
通过这种方法
- (nonnull id)objectForKey:(nonnull id)source {
id key = self.keyGenerator ? self.keyGenerator(source) : source;
id value = self.values[key];
if (!value) {
@synchronized(self) {
value = self.values[key];
if (!value) {
value = self.valueGenerator(source);
OSMemoryBarrier();
self.values[key] = value;
}
}
}
OSMemoryBarrier();
return value;
}
我仍在尝试了解内存屏障和栅栏是如何工作的,上面的代码使我感到困惑的部分是OSMemoryBarrier()
调用的位置,以及为什么需要在{{ 1}}块。
我也不确定替换它的最佳方法,看起来@synchronized
带有参数,而且不确定在任何地方都应该使用哪个参数。