问题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 来管理的。