美文网首页
iOS openURL卡死问题分析

iOS openURL卡死问题分析

作者: 星星杨 | 来源:发表于2023-02-22 11:14 被阅读0次

    前提:
    测试最近测出了一个比较奇怪的问题,反复点击蓝牙跟定位打开设置页面,操作频繁了之后,整个APP就会卡死;

    分析:
    APP卡死第一反应就是主线程被阻塞,打开xcode调试,果不其然,在openURL的时候,有加信号量锁,而且openURL还是在主线程执行的,所以当open的过程还没有执行完成的时候,再去执行open,当前线程势必会进入无限等待的过程;

    image

    因为这是之前同事写的模块,通过仔细观察这个东西,再对比我现在使用的方法;

    发现调用的API有点不同,果然苹果在很早之前就发现了这个问题,所以在iOS10以后就把这个API给弃用了,新的API采用了异步回调返回执行结果,不用同步等待执行结果完成,这样一来也就避免了主线程卡死的问题;

    image image

    以前的做法是开启个异步队列处理也可以解决这一问题:

    dispatch_async(dispatch_get_main_queue(), ^{
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            [[UIApplication sharedApplication] openURL:url];
        }
    });
    

    总结:被弃用的东西肯定有被弃用的原因,我们也有理由去同步研究新的东西及其修改,与时俱进,方能不被淘汰;

    参考:

    调用openURL后,iOS 9.3冻结 |

    iOS 9.3 freeze after calling openURL

    相关文章

      网友评论

          本文标题:iOS openURL卡死问题分析

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