iOS上的ZBar内存泄漏?

我对ZBar的扫描性能非常满意,但是在一个运行在ARC之下的项目中遇到了一个很大的问题。

也就是说,似乎有一个严重的内存泄漏,随readerView的每一个新的显示指数上升。 在一些10倍的内存使用量开始呈指数级增长,20倍左右的扫描程序变得无法使用。

我见过用相同的版本构build的例子,没有问题。 我也在readerView上尝试了方法flushCache,但是没有帮助。

这是一个补丁: http : //sourceforge.net/p/zbar/patches/36/ ,但我没有看到它的任何代码。 由于我没有完整的源代码,我无法find它…

有没有人有同样的问题?

我发现与当前稳定版本的ZBar 0.10完全相同的问题,并通过inheritanceZBarReaderViewController并重写loadView方法来修复它。 我现在可以反复运行扫描仪,而不会让内存变得疯狂。

以下是完整的代码:

…标题

#import <Foundation/Foundation.h> #import "ZBarReaderViewController.h" @interface CVZBarReaderViewController : ZBarReaderViewController @end 

..和执行

 #import "CVZBarReaderViewController.h" @implementation CVZBarReaderViewController - (void) loadView { self.view = [[[UIView alloc] initWithFrame: CGRectMake(0, 0, 320, 480)] autorelease]; } @end 

请记住将.m文件标记为非弧形。 转到项目设置/目标/构build阶段/编译源,并用-fno-objc-arc标记CVZBarReaderViewController.m。

其实这里是补丁的代码

 diff --git a/iphone/ZBarReaderViewController.mb/iphone/ZBarReaderViewController.m --- a/iphone/ZBarReaderViewController.m +++ b/iphone/ZBarReaderViewController.m @@ -320,8 +320,8 @@ - (void) loadView { - self.view = [[UIView alloc] - initWithFrame: CGRectMake(0, 0, 320, 480)]; + self.view = [[[UIView alloc] + initWithFrame: CGRectMake(0, 0, 320, 480)] autorelease]; } - (void) viewDidLoad 

它是一个.diff文件,如果您有权访问回购,您可以轻松应用该修补程序,但由于这是一个短的,您也可以手动。 你只需要在ZBarReaderViewController类的loadView方法中添加一个autorelease调用

我发现暂时的(我希望是暂时的)解决方法。 而不是使用ZBarReaderViewController我直接使用ZBarReaderView和另一个委托来处理结果。