runloop:运行循环。跑圈。基本作用:保持程序的基本运行。处理app的各种事件,比如触摸事件,定时器事件,selector事件。
iOS 中有两套API来访问和使用runloop
1.Founfdation。---->NSrunloop
2.Core Fundation --->CFRunloopref
NSrunloop 和 CFRunloopref 都代表runloop,NSrunloop 是基于CFRunloopref的一层oc包装。
unloop 和线程的关系:
runloop 和线程: 每条线程都有唯一一个与之对应的runloop对象,主线程的runloop对象已经自动创建好了,子线程的runloop需要手动去创建。
runloop在第一次获取时创建,线程结束时销毁。
获得runloop 对象。
[NSRunloop CurrentRunLoop];获取当前线程的runloop对象
[NSRunloop mainRunloop]获取主线程的runloop对象
![](https://img.haomeiwen.com/i1113570/2006d23238d04e09.png)
runloop的相关类
core fundation 中有5个类。
CFRunloopRef
CFRunloopModeRef(运行模式)
#代表runloop的运行模式,一个runloop包含若干个mode,每个mode又包含若干个source/timer/observer
#系统默认5个mode
1.KCFRunloopDefaultMode默认mode,通常主线程在这个mode下运行
2.UITrackingRunloopMode界面追踪mode,用于scroller追踪触摸滑动,保证界面滑动不受其他影响。
3.GSEventReceiveRunloopMode 接受系统事件的内部mode,通常用不到
4.NSRunLoopCommonModes = NSDefaultRunLoopMode + UITrackingRunLoopMode
//占用,标签,凡是添加到NSRunLoopCommonModes中的事件都会被同时添加到打上commmon标签的运行模式上
.......
CFRunloopSourceRef
CFRunloopTimeRef
# 在runloop中有多个运行模式,但是runloop只能选择一种模式运行,这个mode被称为 currentmode
model中至少要有一个timer或者是source,
![](https://img.haomeiwen.com/i1113570/9d94043b11e63e1d.png)
![](https://img.haomeiwen.com/i1113570/87e76c31c23c7a8b.png)
网友评论