8

我没有在我的应用程序中使用 GCD 或太多线程,但我遇到了需要从另一个线程运行一两个方法的情况。一旦这个方法完成,我需要使用回调中的主线程调用另一个方法。我一直在四处寻找如何检测线程何时完成操作,但对该主题仍然不太清楚。

我创建了一个测试应用程序,并使用 viewDidLoad 方法作为一个快速示例。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        NSLog(@"viewDidLoad called");
        sleep(5);  // simulating a thread being tied up for 5 seconds


        dispatch_async(dispatch_get_main_queue(), ^{
            [self callbackMethod];  // method called after above thread has completed running
        });

    });


}

这个例子是否适用于我正在尝试做的事情?运行应用程序时,似乎会在 sleep(5) 完成后调用回调方法。这是处理这种情况的正确方法还是我偏离了方向?

4

1 回答 1

6

你很准;这是下车和上主线程的标准模式。在这里查看我的答案:https ://stackoverflow.com/a/13080519/341994

例如我书中的代码,以这种方式构造:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch25p868mandelbrotGCD/ch38p1106mandelbrotNoThreading/MyMandelbrotView.swift

在那个例子中,看看如何drawThatPuppy离开主线程来进行耗时的计算,然后回到主线程来绘制界面。

于 2012-10-29T04:03:02.077 回答