RunLoop笔记

学习sunny视频笔记

Why Run Loops?

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

RunLoop in Cocoa

RunLoop笔记_第1张图片
RunLoop in Cocoa-1.png
RunLoop笔记_第2张图片
RunLoop in Cocoa-2.png
RunLoop笔记_第3张图片
RunLoop in Cocoa-3.png
RunLoop笔记_第4张图片
Callouts.png
RunLoop笔记_第5张图片
RunLoop机制.png

CFRunLoopSource

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

CFRunLoopObserver

RunLoop笔记_第6张图片
CFRunLoopObserver-1.png
RunLoop笔记_第7张图片
CFRunLoopObserver-2.png

CFRunLoopMode

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

几种模式:

  • NSDefaultRunLoopMode: 默认状态,空闲状态
  • UITrackingRunLoopMode: 滚动scrollview状态
  • UIInitializationRunLoopMode: 私有,app启动时
  • NSRunLoopCommonModes: mode集合
RunLoop笔记_第8张图片
CFRunLoopMode-1.png
RunLoop笔记_第9张图片
CFRunLoopMode-2.png
RunLoop笔记_第10张图片
CFRunLoopMode-3.png
RunLoop笔记_第11张图片
CFRunLoopMode-4.png
RunLoop笔记_第12张图片
CFRunLoopMode-5.png
RunLoop笔记_第13张图片
CFRunLoopMode-6.png

实践

RunLoop笔记_第14张图片
1.png
RunLoop笔记_第15张图片
2.png
RunLoop笔记_第16张图片
3.png
RunLoop笔记_第17张图片
4.png
RunLoop笔记_第18张图片
5.png
RunLoop笔记_第19张图片
6.png

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

你可能感兴趣的:(RunLoop笔记)