繁体   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