我有一个函数返回一个需要15秒才能在iPhone上计算的字符串。
我希望能够在后台线程上运行该函数,以便主线程可以用于用户界面。
我听说GCD
是一种对此有好处的新技术,有人可以提供一些示例代码来解决这个问题吗?
即在后台线程上运行泛型函数并将结果返回到UI文本字段。
修改
感谢Alladinian,这是一种享受。
然而,当我使用GCD时,我的功能需要1秒钟才能在iphone模拟器上执行(我猜这在iphone上大约需要5秒钟(今天晚些时候必须测试它才能确定))< / p>
这有什么理由吗?也许背景线程比较慢或什么?
答案 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];