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,因为有人可能也需要它与标题等。
我是同一个问题,很容易修复。 不记得下面的代码。 您必须在读取器视图之外放置此代码。
[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]; }
为我完美工作! 希望能帮助到你 :)