[英]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.