我有一个应用程序需要在启动(导入核心数据)后执行相对较慢(15-30秒)的任务。我正在寻找一种执行任务的好方法,而不会导致界面出现眩晕或冻结。我试过了:
performselectorinbackground
执行导入以尝试加快流程但是,两者都没有带来显着的改善。有什么想法吗?
答案 0 :(得分:3)
将导入整理为短操作并将其添加到主要NSOperationQueue
[我的重点]
如果将操作放在主队列上,它们将在主线程上运行并影响UI。您应该create a new queue,将最大并发数设置为1,然后只需添加所有操作。
当然,在大多数iDevices上只有一个CPU内核,所以你可能仍会看到问题,但如果你的队列没有使用主线程,fiddling with the operation's thread priority可能会有所帮助。
答案 1 :(得分:1)
如果您试图阻止界面冻结,则需要使用后台线程。您可以使用performSelectorInBackground
,也可以使用[NSThread detachThreadSelector:
。然而,这些实际上并不会加快这个过程,它们只是释放你的主线程来做其他事情。如果您决定使用第二个线程,如果您以前没有使用它,可能需要先阅读它。