iOS中NSTimer的使用

来源:互联网 发布:数据挖掘常用方法 编辑:程序博客网 时间:2024/05/16 03:37

我们在开发的过程中,可能会用到计时器,Foundation框架中有个类叫做NSTimer。我们可以指定绝对的日期与时间,也可以指定执行任务的相对延迟时间,还可以重复运行任务,下面我们来看一下NSTimer的使用。

计时器要和“运行循环”相关联,运行循环到时候会触发任务。创建NSTimer时,可以将其“预先安排”在当前的运行循环中,也可以先创建好,然后由开发者自己来调度。不管何种方式,只有把计时器放在运行循环里,计时器才能正常触发任务。

代码如下,计时器的初始化

情况一:

NSTimer *timer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(printName) userInfo:nil repeats:YES];    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

情况二:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(printName) userInfo:nil repeats:YES];
第一种初始化方法,没有scheduled,所以必须手动addTimer:,将timer添加到runloop中;第二种有scheduled的初始化方法,将以默认的mode将timer添加到当前的runloop中。

如果不想在当前的runloop中,执行timer方法,可以自己新建一个runloop。

NSRunLoop *loop = [NSRunLoop currentRunLoop];[loop run];

计时器的停止

只有一种方法可以将timer移除runloop。

[timer invalidate];
因为计时器NSTimer会保留目标对象,等到自身失效时再释放此对象。调用invalidate方法可令计时器失效;执行完相关任务后,一次性的计时器也会失效。如果将计时器设置成重复执行模式,那么必须自己手动调用invalidate方法,才能令其停止。

由于计时器会保留其目标对象,所以反复执行任务通常会导致程序出问题。也就是说,设置成重复执行模式的那种计时器,容易形成“引用循环”。所以这种情况下,一定要记得调用终止计时器的invalidate方法。

0 0
原创粉丝点击