Iphone 低优先级长时间运行任务

Iphone 低优先级长时间运行任务,iphone,objective-c,cocoa-touch,cocoa,Iphone,Objective C,Cocoa Touch,Cocoa,我有一个应用程序,需要在启动(导入到核心数据)后执行相对缓慢(15-30秒)的任务。我正在寻找一种很好的方法来执行任务,而不会导致界面显得迟缓或冻结。我试过: 将导入分块为短操作并将其添加到主NSOperationQueue 使用performselectorinbackground执行导入,以尝试加快流程 然而,两者都没有带来显著的改善。有什么想法吗?如果要防止界面冻结,需要使用后台线程。您可以使用performSelectorInBackground或[NSThread detachTh

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

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

然而,两者都没有带来显著的改善。有什么想法吗?

如果要防止界面冻结,需要使用后台线程。您可以使用
performSelectorInBackground
[NSThread detachThreadSelector:
。但是,这些方法实际上不会加快进程,它们只是将主线程释放出来做其他事情。如果您决定使用第二个线程,如果您以前没有使用过它,您可能需要先了解它

将导入分块到短操作中,并将它们添加到主NSOperationQueue

[我的重点]

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


当然,在大多数iDevices上,只有一个CPU内核,因此您可能仍然会看到问题,但如果您的队列未使用主线程,则可能会有所帮助。

我使用的是
performselectorinbackground
,它仍然会导致接口非常缓慢,难以交互。如果后台的进程非常密集,则这将是一个滞后,iPhone的功能非常强大。至于导入核心数据,您可能需要阅读以下内容:。它主要说明为了保持内存占用率低,您应该批量导入数据,并经常清除内存堆栈。它还说明了如何做,以及使用其他技术。