【问题标题】:IOS Grand Central Dispatch with callback methodIOS Grand Central Dispatch 带回调方法
【发布时间】:2012-10-18 09:57:39
【问题描述】:

我没有在我的应用程序中使用 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) 完成后调用回调方法。这是处理这种情况的正确方法还是我偏离了方向?

【问题讨论】:

  • 是的,看起来应该可以正常工作。
  • 大家感谢您的快速回复!@matt 也感谢您提供的其他链接。非常感谢!

标签: objective-c ios concurrency grand-central-dispatch


【解决方案1】:

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

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

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

在该示例中,看看drawThatPuppy 如何离开主线程进行耗时的计算,然后返回主线程进行界面绘制。

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 2016-05-07
    • 2011-07-28
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多