美文网首页
iOS-webview,dispatch_async主线程调用a

iOS-webview,dispatch_async主线程调用a

作者: 水水兔 | 来源:发表于2019-07-11 11:58 被阅读0次

    原文地址:https://www.jianshu.com/p/83b5522b4607

    看完RiverLi君的解释,在这里我添加一点自己的理解,感觉会更通俗一点。

    如图:

    CAFF2056-7E4E-454C-B98F-9F0B3AFFC4EF.png

    主线程的队列是串行队列,当执行代码

     dispatch_async(dispatch_get_main_queue(), ^{ [self.webpageView     
              stringByEvaluatingJavaScriptFromString:@"alert(1)"];});
    

    等同于在队列中加入任务一,当点击alert按钮时,因为是UI操作,所以会往队列中添加任务二,由于是串行执行,所以任务二要等任务一执行结束,才能执行,而alert后面的的代码,要等任务二执行了才会执行,即任务一想要结束,必须等任务二结束,如此形成了一个等待环,线程卡死。

    而执行

    [self.webpageView performSelectorOnMainThread:@selector(stringByEvaluatingJavaScriptFromString:)
                                       withObject:@"alert(1)"
                                    waitUntilDone:NO]
    

    因为有个超时时间,等达到一个超时时间后,任务一主动结束,任务二就会被执行,所以整队列任务能正常串行执行

    相关文章

      网友评论

          本文标题:iOS-webview,dispatch_async主线程调用a

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