runloop从字面意思来看是运行循环的意思。
一、RunLoop的基本作用:1.保持程序持续运行
2.处理App的各种事件(比如触摸事件、定时器事件、selector事件)
3.节省CPU资源,提高程序性能
RunLoop与线程的关系:1每一个线程都有唯一的与之对应RunLoop对象
2.主线程的RunLoop已经自动创建好,子线程的RunLoop需要自己手动创建
3.RunLoop在第一次获取时创建,在线程结束 时销毁
三、获取RunLoop对象:
1.获取当前的RunLoop:
//1.获取当前线程对应的RunLoop
NSRunLoop * currentLoop = [NSRunLoop currentRunLoop];
NSLog(@"当前线程对应的RunLoop:%@",currentLoop);
2.获取主线程的RunLoop:[NSRunLoop mainRunLoop];
四、RunLoop相关的类:Core Foundation 中关于RunLoop有5个相关的类
CFRunLoopRef
CFRunLoopModeRef :RunLoop的运行模式,一个RunLoop包含若干个Mode,每个Mode又包含若干个Source/Timer/Observer
每次RunLoop启动时,只能指定其中一个Mode,这个Mode被称作为CurrentMode
如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入
系统默认注册了5个Mode: kCFRunLoopDefaultMode(App的默认Mode,通常主线程是在这个Mode下运行)、UITrackingRunLoopMode(界面追踪的Mode,用于UIScrollView追踪触摸滑动,保证界面滑动时不受其他Mode的影响)、UIInitializationRunLoopMode(在App刚启动时进入的第一个Mode,启动完成后就不再使用)、GSEventReceiveRunLoopMode(接受系统事件的内部Mode,通常不用)、kCFRunLoopCommonMode(是一个占位用的Mode,不是一种真正的Mode)
CFRunLoopSourceRef CFRunLoopTimerRef CFRunLoopObserverRef