ZBar memory leak on iOS?

前端 未结 3 583
清歌不尽
清歌不尽 2021-02-14 07:34

I am very satisfied with ZBar scanning performance, however I ran into a big problem on a project that runs under ARC if that counts at all.

Namely, it seems that there

相关标签:
3条回答
  • 2021-02-14 07:50

    Actually here is the code for the patch

    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
    

    it's a .diff file, if you had access to the repo you could easily apply the patch but since this is a short one, you can also do that manually. You just have to add an autorelease call in loadView method of ZBarReaderViewController class

    0 讨论(0)
  • 2021-02-14 07:55

    I found exactly the same problem with the current stable version of ZBar 0.10, and fixed it by subclassing ZBarReaderViewController and overriding the loadView method. I can now run the scanner over and over without memory going crazy.

    Here's the full code:

    ... header

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

    .. and the implementation

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

    Remember to mark the .m file as being non-arc. Go to Project Settings / Target / Build Phases / Compile Sources and mark CVZBarReaderViewController.m with -fno-objc-arc.

    0 讨论(0)
  • 2021-02-14 08:14

    I found temporary (I hope it is temporary) workaround. Instead of using ZBarReaderViewController I am using ZBarReaderView directly and also another delegate to handle the results.

    0 讨论(0)
提交回复
热议问题