我正在尝试将多个文件压缩到单个zip存档中,并且我遇到了内存不足警告。由于完整的zip文件被加载到内存中,我猜这就是问题所在。有没有一种方法可以使用ZipArchive更好地管理压缩/解压缩,以便不是所有数据都在同一个内存中?
谢谢!
答案 0 :(得分:2)
在对ZipArchive的替代方案进行一些调查后,我发现另一个名为Objective-zip的项目似乎比ZipArchive好一点。这是链接:
http://code.google.com/p/objective-zip/
API非常简单。我遇到的一件事是,在乞讨中我正在读取数据并且从不发布它,所以如果你在zip文件中添加一堆大文件,请记得发布数据。这是我使用的一些代码:
ZipFile *zipFile = [[ZipFile alloc] initWithFileName:archivePath mode:ZipFileModeCreate]; for(NSString *path in subpaths){ NSData *data= [[NSData alloc] initWithContentsOfFile:longPath]; ZipWriteStream *stream = [zipFile writeFileInZipWithName:path compressionLevel:ZipCompressionLevelNone]; [stream writeData:data]; [stream finishedWriting]; [data release]; } [zipFile close]; [zipFile release];
我希望这对遇到同样问题的任何人都有帮助。
答案 1 :(得分:0)
更简单的方法是简单地将ZipArchive的文件读取方法更改为NSData。只需更改以下代码
即可data = [ NSData dataWithContentsOfFile:file ];
到
data = [ NSData dataWithContentsOfMappedFile:file ];
这将导致操作系统以内存映射方式读取文件。基本上它只是使用更少的内存,因为它需要从文件中读取,而不是一次性将它全部加载到内存中。