RunLoop笔记

学习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的源码就不上图了,有兴趣的话可以去翻看源码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容