35

我有一个函数返回一个在 iPhone 上计算需要 15 秒的字符串。

我希望能够在后台线程上运行该函数,以便主线程可以用于用户界面。

我听说GCD这是一种对此有好处的新技术,有人可以提供一些关于它如何工作的示例代码吗?

即在后台线程上运行一个通用函数并将结果返回给 UI 文本字段。

编辑:

谢谢Alladinian,它很管用。

但是,当我使用 GCD 时,我的函数在 iphone 模拟器上执行的时间要长 1 秒(我猜这在 iphone 上大约需要 5 秒(我必须在今天晚些时候对其进行测试才能确定))

有什么理由吗?也许后台线程较慢或什么?

4

2 回答 2

100

好吧,实际上使用 GCD 很容易。典型的工作流程是这样的:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
    // Perform async operation
    // Call your method/function here
    // Example:
    NSString *result = [anObject calculateSomething];
    dispatch_async(dispatch_get_main_queue(), ^{
        // Update UI
        // Example:
        self.myLabel.text = result;
    });
});

有关 GCD 的更多信息,您可以在此处查看 Apple 的文档

于 2012-10-01T09:59:11.950 回答
8

还要补充一点,有时你不需要使用 GCD,这个使用起来非常简单:

[self performSelectorInBackground:@selector(someMethod:) withObject:nil];
于 2012-10-01T11:39:15.503 回答