[英]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
,但我只是嘗試了兩種方式( NSFileHandle
和NSOutputStream
),並且兩者在消耗的內存方面似乎都非常尊重。 下載一個40mb的文件,分配在下載開始時飆升到3mb,但很快穩定在1mb):
所以,我會通過“Allocations”和“Leaks”運行你的應用程序(如果你選擇“Leaks”,你會得到兩者)並看看它的樣子。
如果您還沒有,請通過靜態分析器運行代碼(“產品”菜單上的“分析”),以確保您沒有任何問題。 (你應該在那里有一個干凈的健康狀況;如果報告有任何問題,你必須修復它們。)我還要確保僵屍被關閉(因為在跟蹤所有這些被釋放的對象的過程中,它為每個......創建一個僵屍對象,但它會消耗內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.