2012-10-17 29 views
1

我有以下順序:等待NSURLConnection的代表完成

  1. 開始MBProgressHUD微調
  2. 下載幾個圖像使用NSConnectionURL並實現connectionDidFinishLoading委託來顯示圖像
  3. 所有圖像後
  4. 停止微調下載並顯示包含所有圖像的父視圖

我應該如何實施connectionDidFinishLoading:來解決rmine是否下載了所有圖像,以便我可以停止微調?

我應該跟蹤下載次數,但線程安全性如何?

或者我應該看看GCD?

+0

下面的總下載次數和完成下載都沒問題。 – 2012-10-17 15:40:01

回答

3

我會使用一個NSOperationQueue並提交下載作爲個別塊操作與同步NSURLConnection請求。您可以在此處設置最大併發操作數,這樣您就不會一次下載所有內容,並且您可以免費取消。跟蹤完成可以簡單地通過向隊列提交另一個操作來完成 - 最後一個提交的操作將在所有下載完成後運行。這可能需要將併發操作的數量限制爲一個,所以另一種方法是觀察(KVO)剩餘操作的數量。當它下降到零時,你就完成了。

+0

發現這個http://eng.pulse.me/concurrent-downloads-using-nsoperationqueues/。有用的讀取。 –

+0

是的,這與我的想法很接近。只有我不打擾子類化'NSOperation',因爲你可以使用'-addOperationWithBlock:'和同步'NSURLConnection'輕鬆創建下載操作。 – zoul

+0

+1非常好的解決方案。 – Caleb

1

我應該如何落實connectionDidFinishLoading:確定 所有圖像是否下載,這樣我可以停止微調?

我會通過跟蹤活動連接的數量來做到這一點。您可以將連接本身保留在可變數組中,並在連接完成時將其刪除,或者在連接開始時遞增計數器,並在完成時遞減計數器。無論哪種方式,當活動連接的數量達到零時,您將刪除微調器。