美文网首页
RunLoop笔记

RunLoop笔记

作者: GiantAxe77 | 来源:发表于2017-03-06 17:09 被阅读13次

    学习sunny视频笔记

    Why Run Loops?

    • 使程序一直运行并接受用户输入
    • 决定程序在何时应该处理哪些事件(Event)
    • 调用解耦(Message Queue)
    • 节省CPU时间

    RunLoop in Cocoa

    RunLoop in Cocoa-1.png RunLoop in Cocoa-2.png RunLoop in Cocoa-3.png Callouts.png RunLoop机制.png

    CFRunLoopSource

    • Source是RunLoop的数据源抽象类(protocol)
    • RunLoop定义了2个版本的Source:
      • Source0:处理app内部事件,app自己负责管理(触发),如UIEvent,CFSocket。
      • Source1:由RunLoop和内核管理,Mach port驱动,CFMachPort,CFMessagePort。
    • 如有需要,可从中选择一种实现自己的Source。
    • 上一条基本不会发生。

    CFRunLoopObserver

    CFRunLoopObserver-1.png CFRunLoopObserver-2.png

    CFRunLoopMode

    • Runloop在同一段时间只能且必须在一种Mode下run
    • 更换Mode时,需要停止当前的Loop,开启新Loop
    • Mode是app滑动顺畅的关键
    • 可以定制自己的Mode

    几种模式:

    • NSDefaultRunLoopMode: 默认状态,空闲状态
    • UITrackingRunLoopMode: 滚动scrollview状态
    • UIInitializationRunLoopMode: 私有,app启动时
    • NSRunLoopCommonModes: mode集合
    CFRunLoopMode-1.png CFRunLoopMode-2.png CFRunLoopMode-3.png CFRunLoopMode-4.png CFRunLoopMode-5.png CFRunLoopMode-6.png

    实践

    1.png 2.png 3.png 4.png 5.png 6.png

    最后是翻看CFRunLoop的源码就不上图了,有兴趣的话可以去翻看源码。

    相关文章

      网友评论

          本文标题:RunLoop笔记

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