为什么GCD使这段代码正常工作?

时间:2014-10-30 14:13:59

标签: ios objective-c objective-c-blocks grand-central-dispatch dispatch-async

我正在学习Objective-C并且正在尝试更好地理解GCD。我创建了一个进行API调用的对象(APICaller),然后向其代理提供信息。在此对象的委托(TableViewControllerAviewDidLoad方法中,我调用APICaller方法之一,然后使用该信息更新{ {1}}两个静态单元格。我的问题:为什么,当我使用detailTextLabel.text时,dispatch_async更新的速度是否比不使用它更快?

这会更新单元格,但延迟时间很长:

detailTextLabel.text

...虽然这会立即更新单元格:

- (void)viewDidLoad
{
  APICaller *apiCaller = [APICaller alloc] init];

  [apiCaller getInformationWithArgument:self.argument completionHandler:^(NSString  *results, NSError *error) {
    _staticCell.detailTextLabel.text = results;
  }

}

1 个答案:

答案 0 :(得分:1)

第一个代码片段中显示的完成处理程序未在主线程上运行,因此每当系统决定需要更新时,它都会更新。第二个片段使用GCD显式运行主线程,因此立即更新。