2

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

谢谢!

4

2 回答 2

2

在对 ZipArchive 的替代品进行了一些调查之后,我发现了另一个名为 Objective-zip 的项目,它似乎比 ZipArchive 好一点。链接在这里:

http://code.google.com/p/objective-zip/

API 非常简单。我遇到的一件事是,在乞求时,我正在读取数据并且从不发布它,所以如果您将一堆大文件添加到 zip 文件中,请记住发布数据。这是我使用的一个小代码:

ZipFile *zipFile = [[ZipFile alloc] initWithFileName:archivePath mode:ZipFileModeCreate];

for(NSString *子路径中的路径){
  NSData *data= [[NSData alloc] initWithContentsOfFile:longPath];
  ZipWriteStream *stream = [zipFile writeFileInZipWithName:path compressionLevel:ZipCompressionLevelNone];
  [流写入数据:数据];
  [流完成写作];
  【数据发布】;
}

[zip文件关闭];
[zip文件发布];

我希望这对遇到同样问题的人有所帮助。

于 2010-08-21T23:55:39.883 回答
0

解决这个问题的一个更简单的方法是简单地更改 ZipArchive 将文件读入 NSData 的方法。只需更改以下代码

data = [ NSData dataWithContentsOfFile:file ];

data = [ NSData dataWithContentsOfMappedFile:file ];

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

于 2011-01-04T04:39:37.107 回答