我有一个myButtonAction方法,它执行一些繁重的计算,因此需要在后台线程上运行,同时在主线程中加载指示“任务进度”的视图。一旦后台线程完成了该方法的执行,我需要删除“任务进度”视图并在主线程中加载另一个视图。

[self performSelectorInBackground:@selector(myButtonAction) withObject:nil];
[self performSelectorOnMainThread:@selector(LoadView) withObject:nil waitUntilDone:YES];

我面临的问题是,在myButtonAction完成执行之前,LoadView完成了执行。如何确保LoadView仅在myButtonAction完成执行后才开始执行。

注意:myButtonAction在另一个类中有其方法定义。

最佳答案

使用Grand Central Dispatch:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self myButtonAction];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self LoadView];
    });
});

或者,如果您想保留performSelector方法:
[self performSelectorInBackground:@selector(loadViewAfterMyButtonAction) withObject:nil];

哪里
- (void)loadViewAfterMyButtonAction
{
    [self myButtonAction];
    [self performSelectorOnMainThread:@selector(LoadView) withObject:nil waitUntilDone:YES];
}

10-07 13:19