参考文章
作用
- 通过 RunLoop 机制实现省电,流畅,响应速度快,用户体验好
- 事件循环伪代码
function loop() {
initialize();
do {
var message = get_next_message();
process_message(message);
} while (message != quit);
}
特性
- iOS 中所有的事件监听全部由运行循环负责
- 主线程的
RunLoop
在应用启动的时候就会自动创建
- 其他线程则需要在该线程下自己启动
- 不能自己创建
RunLoop
- RunLoop 并不是线程安全的,所以需要避免在其他线程上调用当前线程的 RunLoop
- RunLoop 负责管理
autorelease pools
- RunLoop 负责处理消息事件,即输入源事件、计时器事件和网络请求事情
应用场景
- 创建常驻线程,执行一些会一直存在的任务。该线程的生命周期跟
App
相同
@autoreleasepool {
NSLog(@"%@", [NSThread currentThread]);
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
- 维护线程的生命周期,让线程不自动退出,
isFinished
为 Yes
时退出
- 在一定时间内监听某种事件,或执行某种任务的线程