1. 什么是RunLoop?
- 就是消息循环,每个线程内部都有一个消息循环;
- 主线程默认开启消息循环, 子线程默认不开启;
2. RunLoop的目的?
- 保证程序不会退出;
- 负责处理事件;
- 如果没有事件发生, 会让程序进入到休眠模式;
3. 事件类型( 输入源, 定时源 )
4.事件的使用( NSTimer )
4.1创建 NSTimer
输出当前循环的模式
没有拖动界面 — —
kCFRunLoopDefaultMode
拖动界面 — —
UITrackingRunLoopMode
4.2 循环常用模式
- NSDefaultRunLoopMode 默认模式
-------拖动界面,, 定时源不懂
- NSRunLoopCommonModes 普通模式
--------拖动界面,定时源不受影响
5. 使用总结
1. 创建消息
2. 把消息放入循环, 并指定消息的运行模式
3. 在循环的模式匹配的时候, 消息运行
6. 子线程的消息循环
1. 创建线程
2. 往线程的消息循环中加入源
3. 开启循环 ( 三种方法 )
- [[NSRunLoop currentRunLoop] run]; ——— 无法停止消息循环停止
- [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]]; ——— 指定循环运行时间
- BOOL
shouldKeepRunning =
YES;
// global —— 要声明全局变量
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]); ——— 苹果推荐使用