在iOS上,我們的應用程序正在下載大約400MB的zip文件。文件下載時,我們會間歇性地崩潰。iOS:NSFileHandle vs NSOutputStream用於大文件下載
當前我正在使用[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];
}
所以從請求進來的數據不存儲或追加到任何其他數據對象。不應該只寫入磁盤而不影響內存?
感謝
我用'NSOutputStream'正是這個目的,它工作正常(這是蘋果在演示模式[SimpleURLConnections樣品(HTTP:。。/ /developer.apple.com/library/ios/#samplecode/SimpleURLConnections/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009245)。)但我只是嘗試了兩種方式,而且兩者看起來都很恭敬內存消耗方面(40MB文件,內存在下載過程中加速到3mb,但在1mb時快速平穩)。我懷疑問題必須放在其他地方(殭屍或別的東西)。你是如何得出結論:NSFileHandle是問題? – Rob
你在使用殭屍嗎?分配工具報告什麼? – Rob
此下載是應用程序中唯一發生的事情。應用程序的其餘部分取決於下載的這個zip文件,因此有一個視圖控制器和一個進度條用於此下載。您會推薦我使用哪種儀器工具來監控? – gngrwzrd