美文网首页
RunLoop简介和NSTimer的使用

RunLoop简介和NSTimer的使用

作者: my__life | 来源:发表于2016-05-02 16:02 被阅读149次

    1.runloop基本概念:

    一个RunLoop是一个事件处理环,系统利用这个事件处理环来安排事务,协调输入的各种事件。RunLoop的目的是让你的线程在有工作的时候忙碌,没有工作的时候休眠(和线程相关)。

    2.作用:

    使程序一直运行接受用户输入

    决定程序在何时应该处理哪些Event

    调用解耦(主调方产生很多事件,不用等到被调方处理完事件之后,才能执行其他操作)

    节省CPU时间(当程序启动后,什么都没有执行的话,就不用让CPU来消耗资源来执行,直接进入睡眠状态)

    3.构成元素

    每一个RunLoop都包含若干个CFRunLoopMode

    在同一时间,只能在一种Mode下面执行

    当需要切换Mode的时候,就必须退出当前的RunLoop。重新启动一个

    系统默认的有以下5种模式

    CFRunLoopDefaultMode: 这个是默认 Mode,也是空闲状态。主线程通常在这个 Mode 下运行的。

    UITrackingRunLoopMode: ScrollView滚动时候的模式。在此模式下会限制输入事件的处理。

    UIInitializationRunLoopMode: 在刚启动程序时进入的第一个 Mode,启动完成后就不再使用。

    GSEventReceiveRunLoopMode: 接受系统事件的内部的Mode,这个Mode由GraphicsServices调用在CFRunLoopRunSpecific前面。通常用不到。

    CFRunLoopCommonModes: 这是一个数组,包括了第1和第2种模式。

    4.CFRunLoopMode的应用举例

    当我们在做图片轮播器的时候,如果使用的是kCFRunLoopDefaultMode那么当ScrollView滚动的时候,RunLoop模式就会切换为UITrackingRunLoopMode,这时候NSTimer就没法执行,这时候我们可以使用kCFRunLoopCommonModes,就可以解决这个问题。

    二:NSTimer

    1.NSTimer是什么?

    是一个定时器,能够在每个确定时间间隔里发送信息给对象。

    2.使用NSTimer时与RunLoop的三种情况。

    1.timer =[NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(repeat:) userInfo:@{@"key":@"value"} repeats:true];

    2.dispatch_async(dispatch_get_global_queue(0,0), ^{        timer = [NSTimer scheduledTimerWithTimeInterval:1target:selfselector:@selector(repeat:)userInfo:@{@"key":@"value"} repeats:true];[[NSRunLoop currentRunLoop] run];});

    3.timer = [NSTimertimerWithTimeInterval:1target:selfselector:@selector(repeat:) userInfo:@{@"key":@"value"} repeats:true];   

     [[NSRunLoopcurrentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

    相关文章

      网友评论

          本文标题:RunLoop简介和NSTimer的使用

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