IOS/Objective-C: 返回主线程

IOS/Objective-C: returning to main thread

我想我明白以下是如何工作的,但希望得到确认。

dispatch_async(kBgQueue, ^{
    NSData* data = [NSData dataWithContentsOfURL: dataUrl];
    [self fetchData:data];//go to web, get data and store in core data
}
dispatch_async(dispatch_get_main_queue(), ^{
    //display new data on main thread.
}

我的问题是,我能不能理所当然地认为,在后台发生的所有事情结束后,主线程上的显示才会发生——不管多长时间?

我希望得到确认的原因是我偶尔会观察到一些显示问题。当后台线程尚未完成保存时,要确保显示器不会尝试访问核心数据。

您的代码不正确。您正试图在从 URL.

检索数据之前很久就更新 UI

你需要:

dispatch_async(kBgQueue, ^{
    NSData* data = [NSData dataWithContentsOfURL: dataUrl];
    [self fetchData:data];//go to web, get data and store in core data
    dispatch_async(dispatch_get_main_queue(), ^{
        //display new data on main thread.
    }
}

此代码还假设 fetchData: 不是异步的,这意味着它不会 return 直到数据被获取和更新。