iOS学习笔记之RunLoop

前言

在苹果官方文档中对Run Loops的介绍是:

Run Loops 是与线程相关的基础结构的一部分;
Run Loop 是一个用于调度工作和协调事件接受的事件处理循环;
Run Loop的目的是在有工作时当线程保持忙碌,没有工作时让线程休眠。

RunLoop是事件循环机制在iOS中的一种实现方式。

正文

RunLoop的应用范畴

  • 保证程序不会退出
  • 定时器(Timer)、NSObjectperformSelector方法执行
  • GCDAsync Main Queue事件回调
  • 事件响应、手势识别、界面刷新等UI事件
  • 网络请求
  • AutoreleasePool管理

RunLoop的获取方法

Foundation框架中

[NSRunLoop currentRunLoop];        // 获取当前线程的RunLoop,如果不存在则创建
[NSRunLoop mainRunLoop];           // 获取主线程的RunLoop

Core Foundation框架中

CFRunLoopGetCurrent();             // 获取当前线程的RunLoop,如果不存在则创建
CFRunLoopGetMain();                // 获取主线程的RunLoop

NSRunLoopCFRunLoopRefOC 包装。并且 CFRunLoopRef 是开源的。

通过阅读Core Foundation源码,我们可以得到如下结论:

  • Runloop与线程密切相关,每条线程都有唯一的一个与之对应的Runloop对象;
  • Runloop保存在一个全局的字典里,线程作为key,Runloop 作为value ;
  • 线程刚创建时并没有Runloop对象,Runloop会在第一次获取它时创建,Runloop 会在线程结束时销毁;
  • 主线程的Runloop已经自动创建,子线程默认没有开启Runloop

你可能感兴趣的:(iOS学习笔记之RunLoop)