低优先级长期运行任务

时间:2011-05-31 05:08:51

标签: iphone objective-c cocoa-touch cocoa

我有一个应用程序需要在启动(导入核心数据)后执行相对较慢(15-30秒)的任务。我正在寻找一种执行任务的好方法,而不会导致界面出现眩晕或冻结。我试过了:

  • 将导入分为短操作并将其添加到主要的NSOperationQueue
  • 使用performselectorinbackground执行导入以尝试加快流程

但是,两者都没有带来显着的改善。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

  

将导入整理为短操作并将其添加到主要NSOperationQueue

[我的重点]

如果将操作放在主队列上,它们将在主线程上运行并影响UI。您应该create a new queue,将最大并发数设置为1,然后只需添加所有操作。

当然,在大多数iDevices上只有一个CPU内核,所以你可能仍会看到问题,但如果你的队列没有使用主线程,fiddling with the operation's thread priority可能会有所帮助。

答案 1 :(得分:1)

如果您试图阻止界面冻结,则需要使用后台线程。您可以使用performSelectorInBackground,也可以使用[NSThread detachThreadSelector:。然而,这些实际上并不会加快这个过程,它们只是释放你的主线程来做其他事情。如果您决定使用第二个线程,如果您以前没有使用它,可能需要先阅读它。