美文网首页
解决xzingobjc库扫描二维码,回调函数调用多次

解决xzingobjc库扫描二维码,回调函数调用多次

作者: playboy | 来源:发表于2018-06-26 17:03 被阅读0次

今天把项目中用到的xzing库替换为了xzingobjc库,发现回调函数- (void)captureResult:(ZXCapture*)capture result:(ZXResult*)result;总是会被调用两次。baidu/google搜索了下没有找到有用的信息。看来只能分析代码了。

分析代码发现

- (void)captureOutput:(AVCaptureOutput*)captureOutput

didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer

       fromConnection:(AVCaptureConnection*)connection函数中

if (self.delegate) {

        ZXBinaryBitmap*bitmap = [[ZXBinaryBitmapalloc]initWithBinarizer:binarizer];

        NSError*error;

        ZXResult*result = [self.readerdecode:bitmaphints:self.hintserror:&error];

        if(result) {

          dispatch_async(dispatch_get_main_queue(), ^{

            [self.delegatecaptureResult:selfresult:result];

          });

        }

      }

这段代码比较可疑。在一个线程执行的时间片段内,识别二维码的线程可以识别成功多次,从而将回调函数多次添加到主线程队列中。

我希望识别成功之后,立马就停止识别,待到需要识别的时候,再开启识别。因此只需要在识别成功后,将任务添加到主线程队列之前,调用 [self stop]即可。

具体代码如下:

if (self.delegate) {

        ZXBinaryBitmap*bitmap = [[ZXBinaryBitmapalloc]initWithBinarizer:binarizer];

        NSError*error;

        ZXResult*result = [self.readerdecode:bitmaphints:self.hintserror:&error];

        if(result) {

            [selfstop];//关键代码,就是这一句

          dispatch_async(dispatch_get_main_queue(), ^{

            [self.delegatecaptureResult:selfresult:result];

          });

        }

      }

相关文章

  • 解决xzingobjc库扫描二维码,回调函数调用多次

    今天把项目中用到的xzing库替换为了xzingobjc库,发现回调函数- (void)captureResult...

  • 10 泛型库

    回调 回调的含义是:对一个库,用户希望库能够调用用户自定义的某些函数,这种调用称为回调。C++中用于回调的类型统称...

  • 异步问题

    什么是回调地狱(函数作为参数层层嵌套)回调函数(一个函数作为参数需要依赖另一个函数执行调用)如何解决回调地狱 pr...

  • ES6之Promise

    Promise用法讲解 避免回调地狱,解决异步多次回调问题 Promise构造函数接受两个个函数作为参数,该函数的...

  • python之回调函数和装饰函数

    一.回调函数 1.回调函数的概念: 是在某一函数中调用另一个函数变量方式,来执行函数.回调函数不是有实现方调用,...

  • 2022-04-21 Android开发扫描二维码

    Android扫描二维码信息 调用华为的scanplus库做二维码扫描 项目地址 https://gitee.co...

  • 回调函数和array_map()函数

    回调函数:某个函数通过利用指针来重复调用某个函数。被调用的函数成为回调函数。 array_map( [函数名字],...

  • Promise

    回调 把一个函数A传给另一个函数B调用,那么A就是回调函数。 回调地狱 回调套回调套回调套回调套回调套回调套回调....

  • Node.js回调函数

    1、函数调用的三种方式:同步调用、回调和异步调用2、回调是一种双向调用模式3、可以通过回调函数来实现回调4、阻塞和...

  • 扫描二维码

    一、扫描二维码需要4个对象 二、实例化 并配置 各对象 三、扫描到信息时的回调,如果不主动取消,会一直调用. 四、...

网友评论

      本文标题:解决xzingobjc库扫描二维码,回调函数调用多次

      本文链接:https://www.haomeiwen.com/subject/crymyftx.html