美文网首页
runtime开启与关闭

runtime开启与关闭

作者: tom__zhu | 来源:发表于2020-12-08 11:15 被阅读0次

    背景需求:APP启动之后要做ping -c 5 hostA 与 ping -c 5 hostB操作,并计算出min、avg、max耗时与方差。

    期望效果:在封装的启动方法中调用自己封装的startPing接口,通过performSelector:withObject:afterDelay重复调用ping:host:callback,最终根据每次ping结果计算耗时相关数据。
    实际效果:ping方法没有被重复调用。


    分析原因:startPing接口在子线程中被调用,子线程没有runloop,而performSelector:withObject:afterDelay正常执行需要有runloop
    问题处理:在ping:host:callback方法调用CFRunLoopRun()。
    期望效果:pingHostA与pingHostB都可以正常执行callback。
    实际效果:pingHosB没有执行


    分析原因:CFRunLoopRun()会让ping:host:callback循环执行,堆栈无法执行到pingHostB。
    问题处理:在pingHostA的callback中执行CFRunLoopStop(CFRunLoopGetCurrent()),用以结束当前循环
    期望效果:pingHostB可以执行callback。
    实际效果:pingHostB正常执行callback。

    流程图:


    总结:
    1、子线程执行performSelector:withObject:afterDelay需要开启runloop
    2、开启runloop方法:CFRunLoopRun()
    3、关闭runloop方法:CFRunLoopStop(CFRunLoopGetCurrent())

    相关文章

      网友评论

          本文标题:runtime开启与关闭

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