Objective-C定时器

1. 定时器的创建
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timerAction:) userInfo:str repeats:YES];
这个方法的作用:
(1)创建一个定时器对象
(2)同时启动了一个定时器任务
各参数意义:
scheduledTimerWithTimeInterval:运行定时器方法的时间间隔
target:要对某个实例对象执行此方法
selector:用SEL封装好的定时器方法
userInfo:给定时器方法传递的参数,在定时器方法中通过timer.userInfo来获取此参数。
repeats:是否重复执行

2.定时器方法(定时器重复执行的方法):
定时器方法可以带参数,也可以不带。
如果带参数,参数类型只能是NSTimer*类型。

3.runLoop的作用:

(1)runLoop是一个事件循环:你的线程进入并使用它来运行响应输入事件的事件处理程序。

(2)相比于while(1)来讲,NSRunLoop是一种更加高明的消息处理模式,对消息处理过程进行了更好的抽象和封装。
(3)在命令行工程中主线程的runLoop默认是不开启的,需要手动开启。
(4)runLoop在这里简单理解为:起到调度的作用,会每隔一定时间间隔通知定时器对象让它去执行定时器方法。
NSRunLoop *loop = [NSRunLoop currentRunLoop]获取当前的runLoop,单例模式。
[loop run];会让程序处于运行状态,不会退出。
关于runLoop,请参考:

http://blog.csdn.net/wzzvictory/article/details/9237973


下面OC语言建一个简单定时器项目:

要求:设计一个10s的倒计时程序,程序启动开启定时器,倒计时完毕定时器关闭。


MyTimer.h

#import 

@interface MyTimer : NSObject
{
    //具体倒计时时间设定参数
    NSInteger _index;
    NSTimer *_timer;
}

- (void)startMyTimer;
- (void)stopMyTimer;
- (void)timerAction:(NSTimer *)timer;
@end

MyTimer.m

#import "MyTimer.h"

@implementation MyTimer
- (instancetype)init
{
    if (self = [super init]) {
        _index = 10;
        [self startMyTimer];
    }
    return self;
}

- (void)startMyTimer
{
    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:@"hello hyr." repeats:YES];
}

- (void)stopMyTimer
{
    [_timer invalidate];
    NSLog(@"倒计时结束");
}

- (void)timerAction:(NSTimer *)timer
{
    _index--;
    NSLog(@"%li秒",_index);
    NSLog(@"%@",timer.userInfo);
    if (_index == 0) {
        [self stopMyTimer];
    }
}
@end

main.m

#import 
#import "MyTimer.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        MyTimer *mytimer = [[MyTimer alloc] init];
        NSRunLoop *loop = [NSRunLoop currentRunLoop];
        [loop run];
    }
    return 0;
}




你可能感兴趣的:(Objective-C)