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