在我的應用程序中,我想通過JSON下載大量的blob。我的應用程序應該離線工作,我有一個同步選項可以在登錄到應用程序時從JSOM服務下載詳細信息,例如任務類型,任務ID以及更多以及blob。 我的問題是,我的應用程序在同步下載100Mb的blob時會崩潰,建議我以某種方式做到這一點,我的應用程序不會崩潰。iPhone-從JSON Web服務下載大量blob的問題
回答
您應該異步下載數據。如果主線程被阻塞一段時間,您的應用程序將被終止。而且,無響應的UI會給用戶帶來不好的體驗。
有關更多詳細信息,請參閱此Technical Q&A。
如果你崩潰,可能的罪犯或者是:
你在同步過程中的前臺運行這一點,它的時間太長,而iOS是殺害你的應用程序;或
您的內存不足。
使用異步下載過程將解決第一個問題,但在我看來,關鍵的問題是JSON是否是正確的接口都爲這個數據量(或者,就此而言,這種類型的數據)。 JSON庫通常需要一個feed並將其加載到NSArray
或NSDictionary
中。但是,在處理這麼大的事情時,這不是一個明智的做法,而且您可以通過設備上最有限的資源之一快速吃掉內存。一般來說,你更喜歡一些流媒體界面,減少你的應用程序的足跡,並防止與內存相關的問題,直接將數據寫入持久存儲,因爲它收到。 (當然,你會這樣做異步,所以該應用程序不會阻止主隊列,並迫使iOS殺死你的應用程序。)
所以,底線,我會問你是如何結婚的JSON界面。我可能傾向於直接下載blob的URL。也許你有一個控制過程的JSON,例如識別該URL是什麼,一些識別信息,例如應用程序可以用來確定是否需要下載的版本號或時間戳等。但是JSON通常不適用於下載大塊。
理論上你可以使用JSON的表兄弟XML進行流式傳輸。但NSXMLParser
有關於流媒體的自己的挑戰,我已經結束了回落到LibXML2
。底線,儘管XML比關於流式傳輸的JSON要好,但我仍然傾向於單獨的URL,您可以直接下載blob,並且只使用JSON(或XML)作爲控制流程。
一旦你有了一個用於直接下載blob的URL,那麼你可以使用下載機制,允許你在收到數據時將數據寫入永久存儲器,而不僅僅是將它附加到你要的某個數據結構中保存在RAM中(例如,如果使用NSURLConnection
,則有一個didReceiveData
,它將接收到的數據寫入永久存儲器,而不是典型的,頭腦簡單的實現,只是將數據附加到NSMutableData
)。
在一個不相關的問題上,應該預先告知,如果這個應用程序是針對商店的,那麼Apple會拒絕通過蜂窩網絡做出過多請求的應用程序。您可能想要檢測連接類型(例如,通過Reachability),並警告用戶是否處於蜂窩連接。
感謝羅布,你的文章對我的應用程序更有用。 – Logunath 2013-03-27 06:51:34
@Rob +1對於你在這個答案的努力。 – 2013-07-25 14:51:57
- 1. iphone JSON Twitter的Web服務問題
- 2. 如何從Web服務iphone下載大文件?
- 3. 從iPhone中的服務器下載圖像的問題
- 4. 安裝從.net web服務下載的.apk文件的問題
- 5. 從服務器下載大量數據
- 6. 從Web服務器下載
- 7. Android使用JSON從服務器下載大量數據
- 8. iPhone中的Web服務問題
- 9. Android的JSON Web服務問題
- 10. 簡單的JSON Web服務問題
- 11. iphone web服務有什麼問題?
- 12. 問題用肥皂web服務iphone
- 13. 後XMLDATA通過web服務iphone問題
- 14. iPhone + Drupal + JSON RPC服務器問題
- 15. 從Azure Blob C#下載批量圖片 - 請求超時問題
- 16. 小Json Web服務SQL問題
- 17. 從外部Web服務下載帶有JQuery/JSON的pdf文件
- 18. Web服務安全問題
- 19. iPhone無法從MySQL下載圖像(BLOB)
- 20. 問題的RESTful Web服務
- 21. Web服務問題
- 22. Web服務問題
- 23. 從服務器下載文件到iPhone
- 24. 訪問JSON數據從Web服務
- 25. 在iOS5中從web服務器獲取json的問題
- 26. 問題發送JSON從陣列到角度上的Web服務
- 27. WCF JSON Web服務,從GET到POST的問題
- 28. 從android中調用SOAP-JSON web服務的問題
- 29. 從服務器上下載iPhone上的圖像時的性能問題
- 30. GAE中服務blob的問題
感謝Attila H,您的鏈接非常有效。 – Logunath 2013-03-27 06:52:24