2013-09-05 20 views
10

私はZBarスキャンのパフォーマンスに非常に満足していますが、ARCの下で実行されるプロジェクトでは大きな問題に遭遇しました。iOSのZBarメモリリーク?

つまり、readerViewの新しい表示ごとに指数関数的に増加する深刻なメモリリークがあるようです。約10倍のメモリ使用量が指数関数的に上昇し始め、約20倍のスキャンプログラムは使用できなくなります。

同じバージョンでビルドされていて、問題はありません。私もreaderViewでflushCacheメソッドを試しましたが、それは役に立ちません。

これは1つのパッチ: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ファイルだあなたはレポにアクセスした場合は、簡単にパッチを適用することができますが、これは短いものですので、あなたもそれを行うことができます手動で loadViewメソッドをZBarReaderViewControllerクラス

+0

ありがとうございますが、これは問題です。-hヘッダーファイル以外のObjective Cソースコードはありませんので、このパッチを適用することはできません。私が開発者のページで得ることができるのは、ヘッダーファイルと静的ライブラリを含むZBarSDKファイルだけでした。 – mbpro

+0

私は見ています:(これはどのようにこれの回避策を講じるべきですか? – Vik

+0

回避策を見つけました:) – mbpro

1

に追加するだけで、一時的な(一時的であることを望みます)回避策を追加するだけです。 ZBarReaderViewControllerを使用する代わりに、ZBarReaderViewを直接使用しています。また、別の代理人が結果を処理しています。

関連する問題