RunLoop简介和NSTimer的使用

2016-05-02  本文已影响149人  my__life

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];

上一篇 下一篇

猜你喜欢

热点阅读