iOS-RunLoop学习

作者: 姜益达 | 来源:发表于2019-06-30 20:12 被阅读0次

    了解

    RunLoop从字面上理解就是运行循环
    iOS能够保证程序不死的原因就是加入了RunLoop,它在程序运行的过程中会不断的循环跑圈,一旦发现有事件需要处理,它就会通知当前线程去处理事件。没有需要处理的时间的时候RunLoop会进入到休眠的状态,直到有事件将它唤醒。所以说使用RunLoop一定程度上提高了程序的运行效率。

    关于RunLoop我们还需要知道以下几点:

    1、每一条线程都只能有一个与之对应的RunLoop对象
    2、主线程在程序运行时已经自动创建好并启动RunLoop,子线程的RunLoop对象需要手动创建并启动。
    3、RunLoop在第一次获取时创建,在线程结束时销毁。(也就是说对子线程来说第一次获取RunLoop时就会创建它,并且RunLoop的存在依赖于线程的存在)

    RunLoop的运行模式

    RunLoop在运行的时候会根据不同的需要选择相应的mode来运行,如当用户滑动界面的时候RunLoop会进入到UITrackingRunLoopMode模式下来运行,但是需要注意的是,RunLoop启动时只能选择一种模式,如果想要切换模式只能退出当前RunLoop,再重新选择模式进入。
    RunLoop模式:

    目前已知的Mode有5种
    kCFRunLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行
    UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响
    UIInitializationRunLoopMode:在刚启动 App 时进入的第一个 Mode,启动完成后就不再使用
    GSEventReceiveRunLoopMode:接受系统事件的内部 Mode,通常用不到
    kCFRunLoopCommonModes:这是一个占位用的Mode,不是一种真正的Mode

    那么我们怎么才能获取到RunLoop呢
    [NSRunLoop currentRunLoop]    //获取当前线程RunLoop对象
    [NSRunLoop mainRunLoop]        //获取主线程RunLoop对象
    

    基本作用:

    了解完RunLoop,那么RunLoop有什么作用呢?

    1、保持程序的持续运行
    2、处理App中的各种事件(比如触摸事件、定时器事件等)
    3、节省CPU资源,提高程序性能:该做事时做事,该休息时休息

    Runloop应用

    那么在实际的开发中,我们在什么情况下会使用到RunLoop呢?
    1、NSTimer 控制Timer在那种模式下运行
    2、常驻线程 保证该线程不死
    应用:检测网络状态、子线程中长期监控某些行为
    3、控制某些行为在特定的模式下运行
    如:控制图片在滑动时不显示

    2681561371789_.pic_hd.jpg
    4、自动释放池
    RunLoop在睡眠之前会释放自动释放池的内容,在唤醒时会创建自动释放池

    相关文章

      网友评论

        本文标题:iOS-RunLoop学习

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