@synchronization但只有一次

时间:2015-06-01 18:06:35

标签: ios objective-c

我遇到多个网络调用同时运行的情况可能会同时遇到同样的错误。当错误发生时,我希望网络调用对不同的身份验证数据执行单独的请求。

我遇到的是所有网络调用都会遇到同样的错误,而auth数据请求的代码将执行四次。我只希望它运行一次。

所以我创建了这个由NSNotification触发的方法。

static NSNumber *skipRefresh; 
@synchronized(skipRefresh) {
  if (!skipRefresh.boolValue) {
    skipRefresh = @(YES);
    [self refresh:^{
      //Do stuff
      skipRefresh = @(NO);
    } failure:^{
      //Do stuff
      skipRefresh = @(NO);
    }
  }
}

我假设这段代码不起作用,或者在最糟糕的情况下,我会遇到最终的竞争条件。

我将如何实现我正在寻找的只运行一次代码而不是顺序的代码?

1 个答案:

答案 0 :(得分:1)

您可以将其放在dispatch_once块中。

static dispatch_once_t onceToken;
                dispatch_once(&onceToken, ^{
                  //Do stuff once here per app launch
                });