RunLoop

作者: 羊妞麻麻 | 来源:发表于2017-01-13 14:38 被阅读27次

问题1:AFNetWorking为什么用RunLoop?
问题2:你的项目中哪里创建了RunLoop?怎么创建的?

围绕上面的问题,相继展开。
1.什么是RunLoop?
2.为什么要用RunLoop?
3.怎么用RunLoop?
4.用的过程中需要注意什么?
5.哪里用到了RunLoop,解决了什么问题?
6.线程与RunLoop的关系?

1.什么是RunLoop?
总的说来,Run loop,正如其名,loop表示某种循环,和run放在一起就表示一直在运行着的循环。

int main(int argc, char * argv[]) {
 //程序一直运行状态 while (AppIsRunning) 
{ //睡眠状态,等待唤醒事件 
id whoWakesMe = SleepForWakingUp();
 //得到唤醒事件 id event = GetEvent(whoWakesMe); 
//开始处理事件 HandleEvent(event); 
} 
return 0;}

Cocoa会涉及到Run Loops的
系统层:GCD,mach kernel,block,pthread
应用层:NSTimer,UIEvent,Autorelease,NSObject(NSDelayedPerforming),NSObject(NSThreadPerformAddition),CADisplayLink,CATransition,CAAnimation,dispatch_get_main_queue()(GCD中dispatch到main queue的block会被dispatch到main RunLoop执行),NSPort,NSURLConnection,AFNetworking(这个第三方网络请求框架使用在开启新线程中添加自己的run loop监听事件)。

为什么要用Runloop?
RunLoop 与线程的关系

比如,你可以通过 pthread_main_thread_np() 或 [NSThread mainThread] 来获取主线程;也可以通过 pthread_self() 或 [NSThread currentThread] 来获取当前线程。CFRunLoop 是基于 pthread 来管理的。

相关文章

网友评论

      本文标题:RunLoop

      本文链接:https://www.haomeiwen.com/subject/tjjkvttx.html