Search code examples
iphonephp-ziparchive

ZipArchive memory problems on iPhone for large archive


I am trying to compress multiple files into a single zip archive and I am running into low memory warning. Since the complete zip file is loaded into the memory I guess that's the problem. Is there a way by which I can manage the compression/decompression better using ZipArchive so that not all the data is in the memory at once?

Thanks!


Solution

  • After doing some investigation on alternatives to ZipArchive I found another project called Objective-zip that seems to be a little better than ZipArchive. Here is the link:

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

    The API is quite simple. One thing I ran into was that in the begging I was reading data and never releasing it so if you are adding a bunch of large files to the zip file remember to release the data. Here is a little code I used:

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

    I hope this is helpful for anyone who runs into the same issue.