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

你可能感兴趣的:(runLoop)