【问题标题】:ZipArchive memory problems on iPhone for large archiveiPhone 上用于大型存档的 ZipArchive 内存问题
【发布时间】:2010-05-19 05:30:51
【问题描述】:

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

谢谢!

【问题讨论】:

  • 嗨!你有没有想过这个?我遇到了完全相同的问题。如果您能告诉我们您是否能够解决此问题,那就太好了。谢谢!!干杯。

标签: iphone ziparchive


【解决方案1】:

在对 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文件发布];

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

【讨论】:

    【解决方案2】:

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

    data = [ NSData dataWithContentsOfFile:file ];
    

    data = [ NSData dataWithContentsOfMappedFile:file ];
    

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

    【讨论】:

    • 这会支持读取无限大小的文件,还是只是使用更少的内存(但仍有限制)?
    • 我没有对它进行任何广泛的测试,但我在我的应用程序中压缩了 zip 文件,最终达到几百兆字节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多