iOS:设备在运行密集计算任务时挂起

时间:2014-06-13 21:43:25

标签: ios load cpu sleep

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

1 个答案:

答案 0 :(得分:1)

您不应该在主线程上执行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];
    });
});