iOS : device is hanging while running an intensive computing task

标签 ios load cpu sleep

我设计了一个有时需要进行密集计算(在循环内)的应用程序,它会在十分之几秒内大量加载 cpu。我启动一个 UIAlertView 来显示一条消息,例如:“请等待几秒钟”。 我的问题是,在此期间,应用程序根本没有响应,用户无法关闭 UIAlertView 本身。这不是主要问题,但对用户不公平。但如果我要实现某种取消按钮,它可能会成为一个真正的问题。 我该如何解决这个问题?例如,当检测到过多的 CPU 负载时​​,我可以在我的计算循环中使用一些 sleep 命令吗? 谢谢。

最佳答案

您不应在主线程上执行 CPU 密集型操作 - 正如您所见,这会影响应用的响应能力。您可以使用 dispatch队列在另一个线程上执行任务。

我链接到的 Apple 指南中有更多详细信息,但通常您可以使用类似 -

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(aQueue, ^{
    [self performIntensiveTask];
});

如有必要,您可能需要知道您的密集任务何时完成。您可以使用 NSNotification 来执行此操作,或者您可以只更新您的 UI 元素 - 如果您选择第二种,请注意您应该只在主线程上更新 UI 元素,这样您就可以 -

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(aQueue, ^{
    [self performIntensiveTask];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self updateUI];
    });
});

关于iOS : device is hanging while running an intensive computing task,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214190/

相关文章:

ios - iOS 的应用程序组织

ios - 如何在UIKit中更改 View ?

ios - spriteKit 中的常规碰撞错误

MySQL 加载数据在最后一个字段上包含字符和字段终止符

iOS7 Safari 全屏图像滚动时变小(隐藏 url-bar 等)

jquery - 在 JQuery 中使用悬停和单击更改 DIV 颜色

jquery加载部分页面,通过变量ID选择

iPhone CPU 使用率上的 Javascript SVG 动画

c# - 使用 C# 设置 CPU 的关联性

c# - 从 C# 检查 CPU Popcount