我正在學習Objective-C,並試圖更好地理解GCD。我創建了一個可以進行API調用的對象(APICaller
),然後向其代理提供信息。在此對象的代理(TableViewControllerA
)viewDidLoad
方法中,我調用APICaller
的方法之一,然後使用該信息更新兩個靜態單元的detailTextLabel.text
。我的問題:爲什麼當我使用dispatch_async
時,detailTextLabel.text
的更新速度比沒有更快?爲什麼GCD使這段代碼正常工作?
這將更新細胞,但有一個較長時間的延遲:
- (void)viewDidLoad
{
APICaller *apiCaller = [APICaller alloc] init];
[apiCaller getInformationWithArgument:self.argument completionHandler:^(NSString *results, NSError *error) {
_staticCell.detailTextLabel.text = results;
}
}
...而這將更新單元格瞬間:
- (void)viewDidLoad
{
APICaller *apiCaller = [APICaller alloc] init];
[apiCaller getInformationWithArgument:self.argument completionHandler:^(NSString *results, NSError *error) {
dispatch_async(dispatch_get_main_queue, ^(void) {
_staticCell.detailTextLabel.text = results;
});
}
}
簡單。所有UI更新必須在主線程上完成,並且完成處理程序不在主線程上。 – rmaddy 2014-10-30 14:17:07