RunLoop

作者: BigBossZhu | 来源:发表于2019-08-14 17:30 被阅读0次

    RunLoop思考

    1. 讲讲RunLoop,项目中实际应用?
    2. RunLoop内部实现逻辑以及数据结构?
    3. RunLoop和线程的关系?
    4. timer和RunLoop的关系?
    5. NSTime连续响应拖动tableView可能无法响应为什么?怎么解决?
    6. RunLoop是怎么响应用户操作的?具体流程是怎么样的?
    7. 说说RunLoop的几种状态?
    8. RunLoop中Model的作用?
      RunLoop:运行循环,程序在循环过程中,做一些事情.
      应用范围:
      1. 定时器,PerformSelector
      2. GCD Async Main Queue
      3. 时间响应,手势识别,界面刷新
      4. 网络请求
      5. AutoreleasePool

    是保证程序一直在运行的基础.
    理解两种状态?
    用户态和内核态之间的切换

    RunLoop对象:
    Foundation框架下的RunLoop对象
    Core Foundation框架下的CFRunLoop.

    RunLoop与线程

    1. 每一条线程都有唯一与之对应的RunLoop对象.
    2. RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value
    3. 线程刚创建的时候并没有RunLoop对象,RunLoop会在第一次获取的时候创建(调用currentRunLoop此时如果没有就会创建)
    4. 主线程默认开启一条RunLoop(mainRunLoop和currentRunLoop主线程同一个对象),子线程默认没有创建RunLoop,需要调用currentRunLoop创建.

    RunLoop相关的类

    CFRunLoopRef:RunLoop相关
    CFRunLoopModelRef:Model相关
    CFRunLoopSourceRef:Source相关
    CFRunLoopTimerRef:Timer相关
    CFRunLoopObserverRef:Observer相关

    C语言底层截图:

    理解runloop,currentMode,modes,source,timer,Observer之间的对应关系.

    1. CFRunLoopModeRef代表RunLoop的运行模式
    2. 一个RunLoop可以对应多个mode,就是modes,但是只能选择一种mode运行.mode内有对用多个sources,times,Observers.
    3. RunLoop启动时只能选择一个mode,作为currentMode
    4. 如果需要切换Mode,只能退出当前loop(退出当前循环的代码,重新进入循环),再重新选择一个Mode进入

    为什么?
    比如滚动模式下,不处理其他的事情.让app运行更流畅.

    RunLoopMode

    有多少种Mode
    很多种,常用两种.

    1. NSDefaultRunLoopMode(kCFRunLooDefault):APP默认Mode,通常主线程在这个mode下运行.
    2. UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView追踪触摸滑动,保证界面滑动时不受其他Mode影响.
    Source0

    通过调用堆栈打印发现:

    1. 触摸事件
    2. perFormSelector:onThread:
    Source1
    1. 基于Port的线程间通信
    2. 系统事件捕捉(先由source1捕捉给source0处理)
    Timer
    1. NSTimer
    2. perFormSelector:withObject:afterDelay:
    Observer
    1. 用于监听RunLoop的状态
    2. UI刷新(在RunLoop将要休眠的时候渲染刷新)
    3. Autorelease自动释放池

    RunLoop状态监听

    进入RunLoop,退出RunLoop,休眠状态,唤醒状态等

    1. kCFRunLoopEnter

    相关文章

      网友评论

          本文标题:RunLoop

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