2013-09-05 28 views
10

我对ZBar的扫描性能非常满意,但是我遇到了一个在ARC下运行的项目中的一个大问题,如果这一点很重要的话。iOS上的ZBar内存泄漏?

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

我见过使用相同版本构建的示例,并且没有任何问题。我也在readerView上尝试了方法flushCache,但它没有帮助。

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

有没有人有同样的问题?

回答

28

我发现与当前稳定版本的ZBar 0.10完全相同的问题,并通过继承ZBarReaderViewController并重写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文件作为非弧线。转到项目设置/目标/构建阶段/编译源,并用-fno-objc-arc标记CVZBarReaderViewController.m。

+0

谢谢,本!那当然是更优雅的解决方案。 – mbpro

+0

迄今最简单的解决方案。没有必要自己重建图书馆。这有助于我在截止日期前得到重要建设。谢谢! – Colin

+0

我们需要如何启动查看器?仍然使用'ZBarReaderViewController * reader = [[[ZBarReaderViewController alloc] init] autorelease];'或者使用'CVZBarReaderViewController'? –

7

其实这里是补丁代码

diff --git a/iphone/ZBarReaderViewController.m b/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文件,如果你有机会访问回购,你可以很容易地应用补丁,但由于这是一个短,你也可以做到这一点手动。你只需要添加一个autorelease呼叫loadView方法ZBarReaderViewController

+0

感谢您的帮助,但这是问题 - 除了.h头文件外,我没有Objective C源代码,所以我无法应用此修补程序。我可以在开发人员的页面上找到的是包含头文件和静态库的ZBarSDK文件。 – mbpro

+0

我看到:(那么你应该如何为此做一个解决方法? – Vik

+0

找到解决方法:) – mbpro

1

我发现临时(我希望它是临时的)解决方法。而不是使用ZBarReaderViewController,我直接使用ZBarReaderView,也使用另一个代理来处理结果。