簡體   English   中英

iOS:NSFileHandle與NSOutputStream進行大文件下載

[英]iOS: NSFileHandle vs NSOutputStream for large file download

在iOS上,我們的應用程序正在下載大約400MB的zip文件。 文件下載時我們會出現間歇性崩潰。

當前我正在使用[NSFileHandle writeData:]來寫入數據,而不是存儲在內存中。 但我想知道操作系統是否以某種方式將其存儲在內存中?

NSOutputStream會成為下載大文件的更好解決方案嗎? 或者可能是標准的unix文件描述符?

我們的文件句柄設置如下:

NSFileManager * fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:tmpFilePath.path contents:nil attributes:nil]; 
_zipFile = [NSFileHandle fileHandleForWritingAtPath:tmpFilePath.path];

目前我的NSURLConnection委托方法如下所示:

- (void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data {
   [_zipFile writeData:data];
}

因此,請求中的數據不會存儲或附加到任何其他數據對象。 這不應該寫入磁盤而不影響內存嗎?

謝謝

我不認為您使用NSFileHandle有任何問題。 我承認我一直使用NSOutputStream ,但我只是嘗試了兩種方式( NSFileHandleNSOutputStream ),並且兩者在消耗的內存方面似乎都非常尊重。 下載一個40mb的文件,分配在下載開始時飆升到3mb,但很快穩定在1mb):

分配和泄漏

所以,我會通過“Allocations”和“Leaks”運行你的應用程序(如果你選擇“Leaks”,你會得到兩者)並看看它的樣子。

如果您還沒有,請通過靜態分析器運行代碼(“產品”菜單上的“分析”),以確保您沒有任何問題。 (你應該在那里有一個干凈的健康狀況;如果報告有任何問題,你必須修復它們。)我還要確保僵屍被關閉(因為在跟蹤所有這些被釋放的對象的過程中,它為每個......創建一個僵屍對象,但它會消耗內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM