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

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

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

解决了这个问题:在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; } 

创建ZBarReaderViewController *readerqr; 作为viewcontroller的属性。

使用它:

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

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

看到同样的问题后,

我搬了

ZBarReaderViewController

ZBarReaderView

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

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

 ZBarReaderView *reader = [ZBarReaderView new]; [self.view addSubview:reader]; reader.readerDelegate = self; reader.tracksSymbols=YES; ZBarImageScanner *scanner = reader.scanner; reader.tag = 99999999; 

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

 [reader start]; 

另外,请记住将标题中的委托更改为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]; } 

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

我解决了Barry Mc G的问题。

即使在使用来自http://nerdvision.net/app-development/ios/zbar-sdk的 iOS7修补zBar SDK后,我也遇到了同样的问题。 (第5次 – 第6次打开页面时,它会以100%CPU冻结。)

无论您是ZBarViewController的子类还是直接使用它,都会显示视图控制器,并在您完成扫描程序后稍后将其关闭。 我找到了这种情况发生的原因,原因是我没有停止video流。 在ZBarReaderView中,有一个函数 – (void)停止; 如果您在完成扫描仪后运行此function,您将看不到问题(第5次 – 第6次打开页面时它会以100%CPU冻结。)。 至少在我的情况下它起作用,并希望它也适合你。

我现在通过从源实现Diff来解决问题。 如果有人需要它,您可以在此处下载带有iOS7支持的已编译zBar SDK。

你可以只替换libzbar.a – 这应该工作。 但我上传了完整的SDK,因为有人可能也需要它与标题等。

http://nerdvision.net/app-development/ios/zbar-sdk

我是同一个问题,很容易修复。 不记得下面的代码。 您必须在读取器视图之外放置此代码。

[readerview stop];

cpu over load问题是由重复的摄像头流引起的。

有同样的问题,扫描仪似乎冻结..
我像joaquin一样修好了……
为读者创建一个属性,当你多次调用它时,你可以检查,如果读者的一个Object在哪里初始化…
这是我正在做的事情:

 - (IBAction)ShowZBarReader { // ADD: present a barcode reader that scans from the camera feed if (!self.reader) { self.reader = [[ZBarReaderViewController alloc]init]; } self.reader.readerDelegate = self; self.reader.supportedOrientationsMask = ZBarOrientationMaskAll; ZBarImageScanner *scanner = self.reader.scanner; // zusätliche Configurationen ... [scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0]; // stellt Bild zur verfügung [self presentViewController:self.reader animated:YES completion:nil]; } 

为我完美工作! 希望能帮助到你 :)