iphone - 将函数移动到 objective-c 中的后台线程

标签 iphone objective-c ios multithreading background

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

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

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

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

编辑:

感谢 Alladinian,它很有用。

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

有什么原因吗?也许后台线程比较慢?

最佳答案

嗯,使用 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

关于iphone - 将函数移动到 objective-c 中的后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12671042/

相关文章:

c# - 编程 float 运动

ios - 自定义 tableviewcell 上的 UISlider 和 UILabels 在第二次播放音频之前不会使用 avaudioplayer 更新

ios - 当 uitableview 滚动时,UIProgressView 显示在错误的行上

iphone - 为什么 ABPersonViewController 除了名称之外不显示任何属性?

iPhone : Texture bigger than 64x64?

iphone - 如何根据 BOOL 值从其他类隐藏已实现的委托(delegate)方法? - objective-c

ios - 如何获得高质量的 iOS 屏幕截图?

iphone - 来自 NSString 的 NSDate,如 HH :mm

iphone - 将 RSS 提要导入 Core Data 时防止重复

ios - Popup VC 显示在单元格上而不是 tableView 上