什么是RunLoop
?
RunLoop
顾名思义是运行时循环,在程序运行过程中循环做一些事情。
当有响应事件比如点击,定时器,滑动等等,Runloop
就会响应。当没有事件处理的时候,RunLoop
就会进入睡眠模式,这样就极大的降低了CPU
资源的损耗,提高了程序的性能。
如果没有RunLoop
,执行完打印就会退出程序
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
问题:项目中有用到Runloop
吗
RunLoop
应用范畴
- 定时器(
Timer
)、PerformSelector
GCD Async Main Queue
- 事件响应、手势识别、界面刷新
- 网络请求
AutoreleasePool
RunLoop
对象
ios
有两套API来访问和使用RunLoop
- Foundation :NSRunLoop
- CoreFoundation:CFRunLoopRef
NSRunLoop
是基于CFRunLoopRef
的一层OC
包装。
获取Runloop
对象相应的方法
[NSRunLoop mainRunLoop]; //获取主runloop
[NSRunLoop currentRunLoop];// 获取当前runloop对象
runloop在项目中的应用场景?
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
应用程序的入口创建了runloop
对象,这也保证了程序能够一直运行。
定时器
[[NSRunLoop currentRunLoop] addTimer:[NSTimer timerWithTimeInterval:2 repeats:YES block:nil] forMode:NSRunLoopCommonModes];
Runloop
与线程
Runloop
与线程一对一的关系。Runloop
保存在一个全局的字典当中。其中线程是key
,runloop
是value
。
网友评论