将函数移动到目标c中的后台线程

时间:2012-10-01 09:55:00

标签: iphone objective-c ios multithreading background

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

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

我听说GCD是一种对此有好处的新技术,有人可以提供一些示例代码来解决这个问题吗?

即在后台线程上运行泛型函数并将结果返回到UI文本字段。

修改

感谢Alladinian,这是一种享受。

然而,当我使用GCD时,我的功能需要1秒钟才能在iphone模拟器上执行(我猜这在iphone上大约需要5秒钟(今天晚些时候必须测试它才能确定))< / p>

这有什么理由吗?也许背景线程比较慢或什么?

2 个答案:

答案 0 :(得分:87)

实际上使用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's documentation here

答案 1 :(得分:6)

另外,有时您不需要使用GCD,这个使用非常简单:

[self performSelectorInBackground:@selector(someMethod:) withObject:nil];