ZipArchive lib中的iPhone内存泄漏问题

时间:2010-09-08 17:51:29

标签: iphone ziparchive

我很感激使用ZipArchive库,但似乎存在内存泄漏。我不知道如何解决这个问题 - 它是用C语言编写的,我对它不熟悉。我的问题是 - 是否可以自动释放行s =(unz_s *)ALLOC(sizeof(unz_s));就像你在这个场景中的Objective-C一样?

extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def)
        const char *path;
        zlib_filefunc_def* pzlib_filefunc_def;
    {

        // ...

        s=(unz_s*)ALLOC(sizeof(unz_s));
        *s=us;
        unzGoToFirstFile((unzFile)s);
        return (unzFile)s;
    }

为了清晰起见,这里是泄漏位置的屏幕抓取:

http://ziparchive.googlecode.com/issues/attachment?aid=-5463964192517894688&name=Screen+shot+2010-08-20+at+8.12.58+PM.png&token=8c66aa58a4826b99ba157903fbae83bb&inline=1

任何人都可以阐明我如何解决这个问题吗?感谢。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并通过阅读一些博客来解决。这似乎很简单
在重新对象之前关闭ZipArchive对象,看起来像是[ZipObj UnzipCloseFile];

答案 1 :(得分:0)

不,你不能自动发布它。自动释放仅适用于Objective-C对象。所以你有两个选择:

  1. 使用free()
  2. 自行释放内存
  3. 使用sNSData内容包装到dataWithBytesNoCopy:length:中,NSData将获取所分配数据的所有权,并在释放unz_s * s = unzOpen2(...); NSData * boxedS = [NSData dataWithBytesNoCopy:s length:sizeof(unz_s)]; 对象时将其释放。
  4. 选项2看起来像这样:

    boxedS

    然后当s被破坏时,它也会释放{{1}}。