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