0

所以任務如下: 1)我有一個track ID,我需要問服務器所有的track數據 2)解析響應(這裏我也有一個相冊ID) 3)現在我有一個相冊ID,我需要問服務器所有的相冊數據 4)解析響應(這裏我也有一個藝術家ID) 5)現在我有一個藝術家ID,我需要問所有藝術家數據的服務器gcd的一堆請求

我想知道用gcd做這件事的正確方法是什麼。 dispatch_async中有3個dispatch_sync-s? 我想這一切都是一個操作,在後臺運行,所以起初我想到NSOperation,但所有回調,解析,保存到核心數據都需要在後臺線程上發生,所以我必須創建一個單獨的運行循環回調以確保它在我得到響應之前不會被殺死,並且不會阻塞ui。

所以問題是我應該如何在這裏使用gcd,還是更好地使用nsoperation和runloop線程回調?謝謝

+1

GCD不保證單個後臺線程操作。 GCD隊列只是執行操作的列表,而不是執行它們的線程。它會將任務劃分爲多個線程,因爲它認爲合適。 – borrrden 2012-04-10 07:57:47

回答

1

我會建議使用NSOperation和回調在主線程上執行。

如果你仔細想想,你的工作流程是非常連續的:1 - > 3 - > 5;解析步驟(2和4)不可能是昂貴的,因此您希望在單獨的線程上執行它們(我猜它們並不昂貴,並且與等待網絡通信的時間相比,您可以忽略解析時間)。

此外,如果你使用像AFNetworking(甚至NSURLConnection +塊)的通信框架,您的工作流程將是很容易實現:

  1. 檢索跟蹤數據
  2. 在「檢索跟蹤數據」
  3. 響應處理器,獲取相冊ID,然後發送「相冊數據」的新請求;
  4. 在「檢索專輯數據」響應處理,得到藝術家的ID,等等...
+0

+1 for NSOperation – CarlJ 2012-04-10 08:19:22

+0

我不認爲你甚至需要'NSOperation'。如果使用了NSURLConnection的異步方法,爲什麼不在主線程上做所有事情? – JeremyP 2012-04-10 09:53:34