RunLoop -- 概念
2020-04-11 本文已影响0人
踩坑小分队
RunLoop
如果没有RunLoop,程序运行起来,执行完相关东西加结束了
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
如果有RunLoop,程序运行起来之后,不会挂,会一直等待指令的输入,然后处理
伪代码:
int main(int argc, char * argv[]) {
@autoreleasepool {
int retValue = 0;
do {
// 睡眠中等待消息
int message = sleepAndWait();
// 收到消息干活
retValue = processMessage(message)
} while (retValue == 0);
}
return 0;
}
作用
- 保持程序的持续运行
- 处理运行中的各种事件<触摸,定时等>
- 节省CPU的资源,该干活的时候干活,该休息的时候休息
应用:
- 定时器(Timer),PerformSelector
- GCD线程
- 事件响应,手势识别,界面刷新
- AutoreleasePool,自动释放池
RunLoop对象
iOS中有2套访问RunLoop的对象
Foundation 框架:NSRunLoop对象
Core Foundation:CFRunLoopRef
NSRunLoop和CFRunLoopRef都代表着RunLoop对象.
NSRunLoop对象是基于CFRunLoopRef的一层OC的包装
CFRunLoopRef有开源的代码<新建一个空项目,将内容添加到项目中查看>
CFRunLoopRef源码地址
image.png