我很感激使用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;
}
为了清晰起见,这里是泄漏位置的屏幕抓取:
任何人都可以阐明我如何解决这个问题吗?感谢。
答案 0 :(得分:2)
我遇到了同样的问题,并通过阅读一些博客来解决。这似乎很简单
在重新对象之前关闭ZipArchive对象,看起来像是[ZipObj UnzipCloseFile];
答案 1 :(得分:0)
不,你不能自动发布它。自动释放仅适用于Objective-C对象。所以你有两个选择:
free()
。s
将NSData
内容包装到dataWithBytesNoCopy:length:
中,NSData
将获取所分配数据的所有权,并在释放unz_s * s = unzOpen2(...);
NSData * boxedS = [NSData dataWithBytesNoCopy:s length:sizeof(unz_s)];
对象时将其释放。选项2看起来像这样:
boxedS
然后当s
被破坏时,它也会释放{{1}}。