如何在Xcode中向主线程发送消息或通知?

use*_*138 1 iphone xcode grand-central-dispatch

我在iPad上有一个功能,我需要按顺序运行3个步骤,比如task1,task2,task3.Task2需要从服务器加载一些数据.所以我需要将task2放入一个单独的后台线程中.

- (IBAction)dbSizeButton:(id)sender {

    //Task1......

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

    dispatch_async(queue, ^{

        //Task2 .....which go to server and download some stuff and update database.

        dispatch_sync(dispatch_get_main_queue(), ^{
            //Task3, continue to work on UI
        });
    });
}   
Run Code Online (Sandbox Code Playgroud)

但看起来正在发生的事情是当Task2启动时应用程序经常被杀死.我不确定为什么.我可以看到Task2确实在一个单独的线程中执行.所以我想知道,如果不是这样做的方式,而不是使用GCD,我可以在Task2的末尾向主线程发送消息或通知,以便我可以启动Task3吗?怎么做到这一点?

mat*_*att 5

问题仅仅是你使用dispatch_sync哪些块.这就是你被杀的原因.你几乎把它弄好了.你想要的是:

// ... task 1 on main thread
dispatch_async(other_queue, ^{
    // ... task 2 in background thread
    dispatch_async(dispatch_get_main_queue(), ^{
        // ... task 3 on main thread
    });
});
Run Code Online (Sandbox Code Playgroud)

这是脱离主线程并重新开始的标准模式.这里的所有都是它的!