iPhone上的ZipArchive内存问题导致大型存档

iPhone上的ZipArchive内存问题导致大型存档,iphone,ziparchive,Iphone,Ziparchive,我试图将多个文件压缩到一个zip归档文件中,但遇到内存不足警告。由于完整的zip文件被加载到内存中,我想这就是问题所在。有没有一种方法可以让我使用ZipArchive更好地管理压缩/解压缩,这样就不会同时将所有数据都存储在内存中 谢谢 在对ZipArchive的替代品进行了一些调查之后,我发现另一个名为Objective zip的项目似乎比ZipArchive好一点。以下是链接: API非常简单。我遇到的一件事是,在乞讨中,我正在读取数据,但从未发布数据,因此,如果要向zip文件添加一堆大文件

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


谢谢

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

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]; ZipFile*ZipFile=[[ZipFile alloc]initWithFileName:archivePath模式:ZipFile模式创建]; for(子路径中的NSString*路径){ NSData*data=[[NSData alloc]initWithContentsOfFile:longPath]; ZipWriteStream*stream=[zipFile writeFileInZipWithName:path compressionLevel:ZipCompressionLevel]; [流写入数据:数据]; [streamfinishedwriting]; [数据发布]; } [zipFile close]; [拉链释放];
我希望这对遇到相同问题的任何人都有帮助。

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

data = [ NSData dataWithContentsOfFile:file ];


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

Hi!你有没有想过?我遇到了完全相同的问题。如果你能告诉我们你是否能够解决这个问题,那就太好了。谢谢干杯。这是支持读取无限大小的文件,还是只使用较少的内存(但仍有限制)?我没有用它做过任何广泛的测试,但我在我的应用程序中压缩了几百兆字节的zip文件。
data = [ NSData dataWithContentsOfMappedFile:file ];