Zbar SDK和ios7/xcode 5 - 应用程序的CPU使用率达到100%,内存超过100MB

RGR*_*GRG 14 iphone xcode objective-c ios

我们使用的是过去2年的Zbar条形码阅读器.使用iOS 7和Xcode 5,在扫描5个条形码后,应用程序达到了iOS 7设备的100%cpu使用率(我可以在Xcode调试模式下看到)并且应用程序的响应速度降低.我们从未在早期的iOS版本中遇到问题,一切正常.

在iOS 7中与相机启动相关的事情是否有所改变,而ZBar SDK未更新?是否有其他人面临与iOS 7相同的问题?

小智 18

解决了这样做:在 viewdidload

readerqr = [ZBarReaderViewController new];
    readerqr.readerDelegate = self;
    readerqr.showsHelpOnFail = NO;

ZBarImageScanner *scanner = readerqr.scanner;
[scanner setSymbology: 0
               config: ZBAR_CFG_ENABLE
                   to: 0];
[scanner setSymbology: ZBAR_QRCODE
               config: ZBAR_CFG_ENABLE
                   to: 1];

// you can use this to support the simulator
if(TARGET_IPHONE_SIMULATOR) {
    cameraSim = [[ZBarCameraSimulator alloc]
                 initWithViewController: self];
    cameraSim.readerView = readerView;
}
Run Code Online (Sandbox Code Playgroud)

创建ZBarReaderViewController *readerqr;为viewcontroller的属性.

使用它:

-(void) showqr:(id)sender
{
    [self presentViewController:readerqr animated:YES completion:nil];
    return;
}
Run Code Online (Sandbox Code Playgroud)

这样工作,没有泄漏,没有cpu 100%


小智 7

看到同样的问题后,

我搬了

ZBarReaderViewController

ZBarReaderView

但令人失望的是,如果您在ZBarReaderViewController中使用Overlay等功能,则必须重新编码所有功能,并且必须手动执行启动和停止扫描程序等操作.

但实际上,在IBAction中你需要这样的东西:

ZBarReaderView *reader = [ZBarReaderView new];
[self.view addSubview:reader];

reader.readerDelegate = self;
reader.tracksSymbols=YES;

ZBarImageScanner *scanner = reader.scanner;

reader.tag = 99999999;
Run Code Online (Sandbox Code Playgroud)

//此处的重要部分是开始扫描

[reader start];
Run Code Online (Sandbox Code Playgroud)

另外,请记住将标题中的委托更改为ZBarReaderViewDelegate

此外,至少在我的代码中被调用的委托"方法"现在是(相对于imagePickerController)

-(void) readerView: (ZBarReaderView*) view
        didReadSymbols: (ZBarSymbolSet*) syms
        fromImage: (UIImage*) img
            {

            for(ZBarSymbol *sym in syms) {

            [view stop];

            [self closeCameraScanner];

    // I am also setting reader to NIL but I don't really know if this is necessary or not.

            reader=nil;
        }


    }


    -(void)closeCameraScanner{

        UIView * v = [self.view viewWithTag:99999999];
        if (nil != v) {
            [v removeFromSuperview];
        }

        [self.view endEditing:YES];

    }
Run Code Online (Sandbox Code Playgroud)

所以,这是一种快速而肮脏的方法.我有一些额外的代码用于手动创建叠加层和限制扫描裁剪,但只要简单地让它运行,这对我来说就是诀窍.