Я обновляю проект и получил следующее предупреждение от 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()
, и почему он должен вызываться внутри блока @synchronized
.
Я не уверен, что лучший способ заменить его, похоже, atomic_thread_fence()
принимает параметр, и я не уверен, какой параметр он должен использовать в любом месте.