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