2013-07-03 59 views
0

在我的應用程序中,我必須一次從服務器下載多個文件(超過1000個文件)。 我創建了操作隊列來下載它們。但我必須在主線程上啓動urlconnection,以便可以調用委託方法。一切工作正常,但600文件應用程序崩潰後沒有任何日誌。下載多個文件(> 1000)NSURlConnection導致崩潰

下面是我使用的步驟:

  1. 創建NSURLConnection的的操作。
  2. 將操作添加到隊列中。
  3. 在主線程上啓動操作。 (我也試過[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];,但dint的工作。)

但是,更多的500個文件的應用程序每次崩潰後。 歡迎任何幫助。

+0

你同時運行多少個?一旦你下載了這些文件,你在做什麼?他們多大? – Wain

+0

我正在運行4個文件。下載後我將它們保存到doc目錄。它們中的一些超過30Mb,但其中大多數大約在10到20Mb – rudeboy

+0

而且當你保存時,你正在將每個數據塊寫入文件(使用文件句柄或其他東西),或者你正在積累所有數據的內存中的數據,然後寫入磁盤一次完成? – Wain

回答

0

每次連接接收到數據(通知代理人connection:didReceiveData:),您都應該立即將該數據寫入磁盤。這可以確保在任何時候都能將最小數量的數據保存在內存中。如果你不這樣做,並且你正在同時下載多個大文件,你很容易導致內存不足,這將導致應用程序被終止。

+0

謝謝ans @ wain。我也試過這種方法。我在didRecieveData中添加了數據並將數據寫入磁盤,但我得到了相同的結果。它仍然崩潰後500個文件。:( – rudeboy

+1

使用儀器來分析應用程序的內存使用情況。 – Wain