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
网友评论