IOS Grand Central Dispatch带回调方法

tg2*_*007 8 concurrency objective-c grand-central-dispatch ios

我没有在我的应用程序中使用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
        });

    });


}
Run Code Online (Sandbox Code Playgroud)

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

mat*_*att 6

你被发现了; 这是下线和主线程的标准模式.请在此处查看我的答案:https://stackoverflow.com/a/13080519/341994

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

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

在该示例中,查看如何drawThatPuppy从主线程中执行耗时的计算,然后返回主线程以进行绘制到界面中.