나는 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) {
dispatch_async(dispatch_get_main_queue, ^(void) {
_staticCell.detailTextLabel.text = results;
});
}
}
간단합니다. 모든 UI 업데이트는 주 스레드에서 수행해야하며 완료 핸들러는 주 스레드에 있지 않아야합니다. – rmaddy