美文网首页
runloop 理解

runloop 理解

作者: kennths | 来源:发表于2019-12-11 14:47 被阅读0次

runloop是什么 顾名思义 也就是字面理解的循环运行 但同时它也是一个对象,是一个结构体,能够给这个对象提供一个入口函数,当它运行这个入口函数后就会形成do..while循环,保证我们的应用程序不被退出。同时它也是消息处理模式

runloop 有什么用呢 

1.保持程序的持续运行

2.处理app中的各种事件(触摸,定时器,performselector)

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__

3.节省cpu资源、提供程序的性能:该做事就做事,该休息就休息,虽然是do..while循环 但不是死循环

runloop与线程的关系

通过CFMutableDictionaryRef 字典  线程与runloop一一对应 通过key-value一一对应

变量--线程--runloop--timer 

子线程默认不开启runloop

timer依赖与runloop

关系图如下:

所以可以总结一下,CFRunloop通过CFMutableDictionaryRef与线程一一对应。CFRunloop是一个结构体struct,里面有集合CFRunloopMode,而CFRunloopMode下有CFRunloopSource集合,CFRunloopTimer集合,CFRunloopObserver集合 都是一对多的关系。但是CFRunloop同时只能在一个Mode下运行,是根据不同来临时切换的,比如有一个Timer在运行,这时的mode就是time的mode,而如果这时屏幕在滑动,就会切换

CFRunloopModel有五个分别是:

(1)kCFRunLoopDefaultMode: App的默认 Mode,通常主线程是在这个 Mode 下运行的。

(2)UITrackingRunLoopMode: 界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响。

(3)UIInitializationRunLoopMode: 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用。

(4)GSEventReceiveRunLoopMode: 接受系统事件的内部 Mode,通常用不到。

(5)kCFRunLoopCommonModes: 这是一个占位的 Mode,没有实际作用。

observer 监听runloop状态

CFRunLoopSource 是一个联合体,包含了source0和source1

source0    主要处理app内部事件,app自己负责管理的事务,比如点击屏幕(UIEVENT)。 回调函数指针(signal 待处理,wakeup唤醒runloop处理事件)

source1 match_port&函数回调指针 主要通过相应的port端口来传递消息 主要用来线程之间通讯比较少用

相关文章

  • Runloop分析

    RunLoop 参考:深入理解RunLoop ibireme:《深入理解RunLoop》 Runloop 的概念 ...

  • NSRunLoop

    深入理解RunLoop RunLoop深度探究(一) RunLoop深度探究(二) RunLoop深度探究(三) ...

  • iOS知识点(10)RunLoop

    深入理解RunLoop iOS---实例化讲解RunLoop iOS runloop iOS-RunLoop充满灵...

  • iOS 各种技术点网址

    RunLoop 深入理解RunLoop(作者 :ibireme)iOS线下分享《RunLoop》by 孙源@sun...

  • Runloop 详解

    Runloop 详解 参考链接: 深入理解RunLoop CFRunLoop 概念 runloop :是管理和处理...

  • 深入理解runloop

    原文 深入理解runloop 深入理解RunLoop 由 ibireme | 2015-05-18 | iOS, ...

  • iOS 这是你想要的

    Runloop 相关 Runloop 保持线程能随时处理事件而不退出深入理解Runloop 线程和Runloop ...

  • iOS开发基础之Runloop

    文章内容来自:深入理解RunLoop 官方文档-Runloop Runloop概念 Runloop本身是一个对...

  • OC部分原理参考

    1.RunLoop 深入理解RunLoopRunLoop 视频RunLoop第一讲 视频RunLoop实战 视频 ...

  • RunLoop学习笔记

    参考深入理解RunLoop深入研究 Runloop 与线程保活RunLoop分享by孙源 RunLoop的概念 R...

网友评论

      本文标题:runloop 理解

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