2013-09-05 55 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,也使用另一個代理來處理結果。