2010-09-22 84 views
4

出於性能方面的原因,我實例化一個專用的NSThread來處理從網絡服務器流入的傳入消息。我使用NSOperation來實例化連接並通過NSURLConnection委託接收傳入數據,但一旦新數據進入並被解析,我將消息的處理卸載到專用的NSThread。這個想法是讓一個線程專注於接收傳入的消息,並讓其他線程完成處理。如何在應用程序之後正確關閉/重新啓動NSThreadDEnterBackground/applicationWillEnterForeground

當applicationDidEnterBackground進來時關閉NSThread的正確方法是什麼?

另外,如何在applicationWillEnterForeground進來時重新啓動NSThread?

除了主線程之外,似乎其他後臺線程的狀態在進入休眠和重新啓動之間不會保持。順便說一句,我都是用NSOperations來處理大量工作量大的任務 - 即通過網絡訪問資源,執行計算等。但是,在這種情況下,我需要通過調用performSelector:onThread:withObject:waitUntilDone:並將它傳遞給目標線程,來處理長時間存在的專用線程上的消息。看來NSOperation並不適合這一點。 我將不勝感激您的意見。

回答

0

「出於性能原因」?

  • 如果處理不需要太多時間,請在主線程上運行所有內容(包括NSURLConnection)。併發錯誤是一大痛苦。
  • 如果你想要串行運行,你可以用一個帶有maxConcurrentOperations = 1的NSOperationQueue來模擬一個「單線程」。我很確定NSOperationQueue使用線程池(在4.0上,GCD可能使用線程池),這意味着你不需要保持線程始終運行。

除此之外,系統會自動暫停和恢復您的進程,因此您不需要關閉線程。

我不確定「其他後臺線程的狀態」是什麼意思。

相關問題