2011-05-31 73 views
3

我有一个应用程序需要在启动(导入到核心数据)后执行相对较慢(15-30秒)的任务。我正在寻找一种很好的方式来执行任务,而不会导致界面显得呆滞或冻结。我已经试过:低优先级长时间运行任务

  • 分块了进口到短期操作,并将它们添加到主NSOperationQueue
  • 执行使用performselectorinbackground尝试加快这一进程

但是进口,无论是导致重大改进。有任何想法吗?

回答

3

分块了进口到短期操作,并将它们添加到主NSOperationQueue

[我的重点]

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

当然,在大多数iDevices中只有一个CPU核心,因此您可能仍会看到问题,但如果您的队列未使用主线程,则fiddling with the operation's thread priority可能会有所帮助。

1

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

+0

我正在使用'performselectorinbackground',它仍然导致界面非常缓慢,难以与之交互。 – Stussa 2011-05-31 05:17:44

+0

那么如果背景中的过程非常密集,就会有一些滞后,iPhone只有如此强大。至于导入到核心数据,你可能想阅读:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html。它主要是说为了保持低内存占用,应该批量导入数据,并经常清除内存堆栈。它还说如何做到这一点,并使用其他技术。 – 2011-05-31 05:22:41