2011-05-31 35 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