runLoop

runloop是通过事件循环来对事件管理的一个对象。线程和runloop一一对应,映射关系保存在一个全局字典中(键值对:线程:runloop)

1、没有消息处理时,休眠已避免资源占用,由用户态切换到内核态。有消息处理时立刻被唤醒,由内核态切换到用户态

 应用:(1)用户滑动时模式为追踪模式计时器不工作,需要运行在common模式

(2)子线程数据请求完数据更新UI时保证不打断用户的滑动操作,需要把更新UI放在默认模式下

runloop 组成:Modes->sources(sources0:基于port,source1:非基于port,如触摸、点击)/timers/observe,要想启动runloop需要sources,或timer触发

注:源码中主线程不需要sources/timer

CFRunLoop和NSRunLoop区别:

CFRunLoop在coreFroundation框架中,纯C语言实现,线程安全

NSRunLoop对CFRunLoop面向对象的封装,非线程安全

runloop或者条件锁(NScondition)可以使线程保活

可用runloop监测卡顿:CFRunLoopObserver

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

推荐阅读更多精彩内容