美文网首页
CFNetwork HTTPProtocol::shouldAt

CFNetwork HTTPProtocol::shouldAt

作者: Waynee | 来源:发表于2020-11-26 14:33 被阅读0次

    最近工作中在crash日志收集到这样的信息:SEGV_ACCERR CFNetwork __ZN12HTTPProtocol23shouldAttemptOriginLoadEv

    HTTPProtocol::shouldAttemptOriginLoad(),

    HTTPProtocol::_protocolInterface_startLoad

    如图1:

    图 1

    经过多番的资料查询,了解到这是iOS12.x系统会出现的一个问题。CFNetwork crash on iOS 12.x。苹果网站上面出现过相关crash的讨论,但没有找到一个说出解决方案的,我们经过长时间推敲,有以下复现方式和解决方案。

    您可以通过NSURLProtocol对请求进行拦截,在startLoading和stopLoading方法的堆栈跟踪来确定___ZN19URLConnectionLoader27_private_ScheduleOriginLoadEPK12NSURLRequestPK20_CFCachedURLResponse_block_invoke_2调用startLoading,而CFURLProtocol_NS :: _ protocolInterface_cancelLoad()由于cancel请求会调用stopLoading.

    crash的复现方式总结如下:

    在项目中对某一个请求循环发送500+次,每次send之前cancel掉上一次的请求,即可复现这种crash,且是必现。如图2:

    图 2

    我司项目中是某一个列表因特殊原因每次需要用SDWebImage进行请求(此处请求不是取磁盘或内存中的图片)频率过高导致(SD一般不会产生这样的问题,因为多数取的缓存,而且SD默认有开启线程的个数限制的,若想复现bug,可通过options每次走远程请求)。如果您遇见了,可以查看是不是在滑动列表的时候在不断send和cancel网络请求

    希望以上能帮到同行们,上述若有不足或错误,盼请指正!!!

    相关文章

      网友评论

          本文标题:CFNetwork HTTPProtocol::shouldAt

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