美文网首页
关于Runloop

关于Runloop

作者: 攻克乃还_ | 来源:发表于2017-10-01 22:18 被阅读3次

    一、基本

    • 1.在runloop中有多个运行模式,但是只能选择一种模式运行
    • 2.runloop运行至少要有一个timer或者是source
    • 3.界面被拖拽时候,模式自动改为UITrackingRunLoopMode
    • 4.kCFRunLoopCommonModes模式包含了kCFRunLoopDefaultModeUITrackingRunLoopMode

    二、Runloop内部

    • runloop里面包含了Source,Observer, Timer
    • Source又分为Port-Based Sources端口源, Custom Input Sources自定义源, Cocoa Perform Selector Sources
    • Source又分为基于端口的(系统的)和非基于端口的

    三、执行任务完毕后线程被销毁,如何开启常驻线程?为什么要开启?

    • 开启常驻线程处理整个应用中的网络请求
    • 1.开启常驻线程:在当前runloop中添加源或者NSTimer:(不推荐)
    NSRunLoop *runloop = [NSRunLoop currentRunLoop];
    NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
    [runloop addTimer:timer forMode:NSDefaultRunLoopMode];
    
    • 2.开启常驻线程:添加基于端口的事件(推荐)
    [runloop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
    [runloop run];
    

    四、Runloop运行逻辑:

    1.通知观察者即将进入runloop
    
    2.通知观察者要处理定时器和源事件
    3.处理定时器和源事件
    
    4.通知观察者即将进入休眠
    5.已经进入休眠
    6.通知观察者runloop被唤醒
    
    7.通知观察者即将推出runloop
    

    五、Runloop中自动释放池的创建和释放

    • 第一次创建:
      • 即将进入runloop
    • 最后一次销毁:
      • 即将推出runloop
    • 其他时候的创建和销毁
      • 当runloop 即将睡眠 的时候,销毁之前的释放池, 重新创建一个新的

    runloop的不同模式

     1.UIInitializationRunLoopMode:启动时
     2.UITrackingRunLoopMode:ScrollView滑动时 
     3.NSDefaultRunLoopMode:默认/空闲状态
     4.NSRunLoopCommonModes:2,3 Mode
     苹果公开的 Mode :3,4
    

    相关文章

      网友评论

          本文标题:关于Runloop

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