我正在開發基於網絡的iOS應用程序,用於從服務器下載JSON數據並對其進行處理。下載任務和處理任務都需要很長時間才能完成,所以我不想在主線程中執行任何操作。在後臺執行網絡和其他耗時任務
我認爲有2種方式來做到這一點:
使用
NSURLConnection
執行異步加載,並在didFinishLoading
方法使用GCD(說)做加工的背景。使用GCD的
dispatch_async
(比方說)在後臺開始工作,並使用NSURLConnection's
sendSynchronousRequest:returningResponse:error
同步下載的數據,進行數據處理,並調用UI
更新在主線程上。
我認爲第二個方法是更容易編寫和將產生更乾淨的代碼,特別是當一個「下載/處理」任務涉及多個連續的服務調用的數據下載。因此,而不是執行會喜歡:
主(開始) - >背景(下載) - >主(NSURLConnectionDelegate
方法) - >背景(數據處理) - >主(UI
更新)
,我們將有:
主要(開始) - >背景(下載) - >背景(數據處理) - >主要(UI更新) 這似乎是更清潔的我。
我發現2個類似的問題:Good pattern for Internet requests with Grand Central Dispatch? 而
NSURLConnection and grand central dispatch
而且答案似乎都使用概念上類似於方法1
一些建議是否有達到什麼沒有描述有道在方法2中?
在此先感謝!
看看[AFNetworking](https://github.com/AFNetworking/AFNetworking)。 – 2013-03-07 04:50:05
@MikeD,AFNetworking可以另外在這裏執行的是在後臺執行JSON解析,不是嗎?如果我需要對解析的JSON對象執行昂貴的處理,該怎麼辦?我認爲我正在尋找的是一個設計模式比框架更多:) – wingman123 2013-03-07 05:04:58
我總是使用第二種方法,但第一種方法的優勢之一是在iOS 6之前,如果您想要超過240秒的超時請求,它可能取消異步連接。 – prasad 2013-03-07 05:32:12