我有课:
ClassX.m
@property (assign) BOOL wasProcessed;
-(void) methodA { //<- this can be called many times in short period of time
dispatch_async(dispatch_get_main_queue(), ^{
[self methodB];
});
}
- (void) methodB {
if (!self.wasProcessed) {
self.wasProcessed = YES;
//... some code
}
}
由于使用了 dispatch_async,因此可以同时处理几个对 methodB 的调用,并且以下代码需要是原子的:
if (!self.wasProcessed) {
self.wasProcessed = YES; //e.g two calls can enter here before setting YES and it would be bad because I want to process it only one time
如何使这两行成为原子(检查和设置变量)?我不想制作“self.wasProcessed = YES;”之后的原子代码 所以将整个 if 移动到 @synchronize(self) 将不是一个好的解决方案。如果我的想法有任何问题,请指出,因为我对这些主题不是很有经验,谢谢。