iPhone上的ZipArchive内存问题,适用于大型存档

时间:2010-05-19 05:30:52

标签: iphone ziparchive

我正在尝试将多个文件压缩到单个zip存档中,并且我遇到了内存不足警告。由于完整的zip文件被加载到内存中,我猜这就是问题所在。有没有一种方法可以使用ZipArchive更好地管理压缩/解压缩,以便不是所有数据都在同一个内存中?

谢谢!

2 个答案:

答案 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 ];

这将导致操作系统以内存映射方式读取文件。基本上它只是使用更少的内存,因为它需要从文件中读取,而不是一次性将它全部加载到内存中。