iOS 7中ZBarReaderViewController的内存相关问题

iPa*_*tel 2 iphone cocoa-touch objective-c ios

ZBarReaderViewController用于扫描QR码.它完全适用于iOS 6.但当我使用iOS 7与我的项目时,它没有正常使用ZBarReaderViewController

问题与内存有关,它需要100 MB以上,此时我的设备已挂起.

一般在我的项目中.用户可以扫描QR生成器图像,我有识别QR码代码与我从服务器获得的字符串相关的功能,如果是,则转到下一个视图控制器,否则保持当前(继续QR扫描)屏幕.

如果QR码马赫与我的字符串然后在下一个屏幕上有"取消"按钮,这使得扫描另一个代码(这意味着我得到了以前的viewController (QR扫描)).

那时我去下一个viewController并回到pervious(QR扫描屏幕),然后我每次得到ZBarReaderViewController这样的(可能是)内存相关问题被生成.

但我写代码

if(self.ZBarReaderVC)
{
            for(UIView *subVies in self.ZBarReaderVC.cameraOverlayView.subviews)
                [subVies removeFromSuperview];
            for(UIView *subVies in self.ZBarReaderVC.view.subviews)
                [subVies removeFromSuperview];
            [self.ZBarReaderVC removeFromParentViewController];
            self.ZBarReaderVC = nil;
}
Run Code Online (Sandbox Code Playgroud)

之后,[self.ZBarReaderVC dismissModalViewControllerAnimated: YES];我删除ZBarReaderViewController的结束时间,那么为什么每次我得到分配ZBarReaderViewController???

同时,我把[self.ZBarReaderVC.readerView stop];之前解雇ZBarReaderViewController的来回扫描停流阅读器 ,但它也没有为我工作.

但我试图解决我的问题几个小时的时间,但我无法解决我的问题

请帮我.

Alos我发现了类似的问题

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

http://sourceforge.net/p/zbar/discussion/1072195/thread/df4c215a/

但没人能帮助我.

iPa*_*tel 6

我发现iOS 7问题发生在

self.ZBarReaderVC.view.frame = self.view.bounds;
Run Code Online (Sandbox Code Playgroud)

我把断点放在这里并检查每当我从之前的viewController烘焙时,它需要更多的时间和内存(问题)在这段代码.

所以首先我需要删除self.ZBarReaderVC其所有子视图的视图..所以首先我需要写

if(self.ZBarReaderVC) // first check `self.ZBarReaderVC` is created or not?
{
  [self.ZBarReaderVC.readerView stop]; // then stop continue scanning stream of "self.ZBarReaderVC"
  for(UIView *subViews in self.ZBarReaderVC.view.subviews) // remove all subviews
    [subViews removeFromSuperview];
  [self.ZBarReaderVC.view removeFromSuperview]; 
  self.ZBarReaderVC.view = nil;
}
Run Code Online (Sandbox Code Playgroud)

而且我在iOS 7 self.ZBarReaderVC中仍然继续扫描QR码流,所以每次我们需要在你的QR码扫描完成后停止它,你需要解雇你的self.ZBarReaderVC第一次停止扫描[self.ZBarReaderVC.readerView stop];

有些时候用户需要编写/调用(For do /实现某些类型的额外功能)

[self.ZBarReaderVC viewDidLoad];
[self.ZBarReaderVC viewWillAppear:NO];
[self.ZBarReaderVC viewDidAppear:NO];
Run Code Online (Sandbox Code Playgroud)

self.ZBarReaderVC那么它的方法就不需要使用了iOS 7,所以如果有任何用户调用这种方法self.ZBarReaderVC那么请把它放在评论中.

我希望我的建议对其他人有帮助.谢谢 :)

  • +1它对我来说非常合适.我尝试过dispatch_queue但它不起作用.最后你的答案成功了.谢谢 (3认同)