RunLoop

作者: Code_人生 | 来源:发表于2019-04-19 10:07 被阅读17次

    一、RunLoop是什么?

    • 运行循环
    • 是个结构体、是个对象,这个对象提供了一个入口函数
    • 程序会进入 do..while循环
    • 循环处理一些事情

    二、Runloop的作用

    • 保持程序的持续运行
    • 处理APP中的各种事件(触摸、定时器、performSelector)
    • 节省cpu资源、提高程序的性能; 该做事就做事,该休息就休息
    1. 保证线程不退出。
    2. 负责监听所有的事件(iOS中的触摸、时钟、网络事件)
    3. RunLoop负责绘制UI

    三、Runloop的item

    • block应用:__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__
    • 调用timer:__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
    • 响应source0:__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
    • 响应source1: __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
    • GCD主队列:__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
    • observer源:__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__

    四、runloop与线程的关系

    Runloop:线程.png
    • 一一对应关系, 通过一个全局可变CFMutableDictionaryRef(就是key-value)
    • runloop的创建, __CFRunLoopCreate(pthread_main_thread_np())
    • runloop 存储, CFDictionarySetValue(dict, pthreadPointer(pthread_main_thread_np()), mainLoop);
    • runloop 获取, CFDictionaryGetValue(__CFRunLoops, pthreadPointer(t))
    1. 线程 -- runloop -- timer
    2. 子线程runloop 默认不开启
    3. timer 依赖于runloop
    RunLoop的金典.png
    Runloop结构.png
    Runloop机制.png
    RunLoop的结构.png
    RunLoop的原理.png

    相关文章

      网友评论

        本文标题:RunLoop

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