我遇到多个网络调用同时运行的情况可能会同时遇到同样的错误。当错误发生时,我希望网络调用对不同的身份验证数据执行单独的请求。
我遇到的是所有网络调用都会遇到同样的错误,而auth数据请求的代码将执行四次。我只希望它运行一次。
所以我创建了这个由NSNotification触发的方法。
static NSNumber *skipRefresh;
@synchronized(skipRefresh) {
if (!skipRefresh.boolValue) {
skipRefresh = @(YES);
[self refresh:^{
//Do stuff
skipRefresh = @(NO);
} failure:^{
//Do stuff
skipRefresh = @(NO);
}
}
}
我假设这段代码不起作用,或者在最糟糕的情况下,我会遇到最终的竞争条件。
我将如何实现我正在寻找的只运行一次代码而不是顺序的代码?
答案 0 :(得分:1)
您可以将其放在dispatch_once
块中。
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//Do stuff once here per app launch
});