iOS中定时器NSTimer的使用

1、初始化

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

注:不用scheduled方式初始化的,需要手动addTimer:forMode: 将timer添加到一个runloop中。

  而scheduled的初始化方法将以默认mode直接添加到当前的runloop中.

 

举例:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];

NSTimer *myTimer = [NSTimer  timerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:)userInfo:nilrepeats:NO];

[[NSRunLoop  currentRunLoop] addTimer:myTimerforMode:NSDefaultRunLoopMode];

 

2、触发(启动)

当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。

 

可以使用-(void)fire;方法来立即触发该定时器;

注:You can use this method to fire a repeating timer without interrupting its regular firing schedule. If the timer is non-repeating, it is automatically invalidated after firing, even if its scheduled fire date has not arrived.

在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;

在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。

 

3、停止

- (void)invalidate;

这个是唯一一个可以将计时器从runloop中移出的方法。

 

注:

NSTimer可以精确到50-100毫秒.

NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个点,那么下一个点就pass过去了.

 

延时函数和Timer的使用

//延时函数:
[NSThread sleepForTimeInterval:5.0]; //暂停5s.

//Timer的使用:
NSTimer *connectionTimer;  //timer对象

//实例化timer
self.connectionTimer=[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop]addTimer:self.connectionTimer forMode:NSDefaultRunLoopMode];
//用timer作为延时的一种方法
do{
[[NSRunLoopcurrentRunLoop]runUntilDate:[NSDatedateWithTimeIntervalSinceNow:1.0]];
}while(!done); 

//timer调用函数
-(void)timerFired:(NSTimer *)timer{
done =YES;
}

 

转自:http://magicalboy.com/objective_c_nstimer_usage/#comment-45

创建 NSTimer

    1. Scheduled Timers & Using Selector

 

- (IBAction)startOneOffTimer:sender {

 

    [NSTimer scheduledTimerWithTimeInterval:2.0

 

             target:self

 

             selector:@selector(targetMethod:)

 

             userInfo:[self userInfo]

 

             repeats:NO];

 

}

view rawgistfile1.mThis
Gist
 brought to you by GitHub.

 

    1. 如上,如果没有重复执行的timer相当于 

[self performSelector:@selector(targetMethod:) withObject:nil afterDelay:2.0];

    1.  

 

// declcare

@property (assign) NSTimer *repeatingTimer;

 

// implements

- (IBAction)startRepeatingTimer:sender {

 

 

 

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.5

 

                              target:self selector:@selector(timerFireMethod:)

 

                              userInfo:[self userInfo] repeats:YES];

 

    self.repeatingTimer = timer;

 

}

 

- (IBAction)stopRepeatingTimer:sender {

 

    [repeatingTimer invalidate];

 

    self.repeatingTimer = nil;

 

}

view rawgistfile1.mThis
Gist
 brought to you by GitHub.

 

    1. Unscheduled Timers & Using Invocation

 

// declare

@property (retain) NSTimer *unregisteredTimer;

 

 

 

// implements

- (IBAction)createUnregisteredTimer:sender {

 

    NSMethodSignature *methodSignature = [self methodSignatureForSelector:@selector(invocationMethod:)];

 

    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];

 

    [invocation setTarget:self];

 

    [invocation setSelector:@selector(invocationMethod:)];

 

    NSDate *startDate = [NSDate date];

 

    [invocation setArgument:&startDate atIndex:2];

 

 

    NSTimer *timer = [NSTimer timerWithTimeInterval:0.5 invocation:invocation repeats:YES];

 

    self.unregisteredTimer = timer;

 

}

 

 

 

- (IBAction)startUnregisteredTimer:sender {

 

    if (unregisteredTimer != nil) {

 

        NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

 

        [runLoop addTimer:unregisteredTimer forMode:NSDefaultRunLoopMode];

 

    }

 

}

 

- (IBAction)stopUnregisteredTimer:sender {

 

    [unregisteredTimer invalidate];

 

    self.unregisteredTimer = nil;

 

}

时间: 2024-10-02 21:05:28

iOS中定时器NSTimer的使用的相关文章

iOS中的NSTimer定时器的初步使用解析_IOS

创建一个定时器(NSTimer) - (void)viewDidLoad { [super viewDidLoad]; [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(actionTimer:) userInfo:nil repeats:YES]; } - (void)actionTimer:(NSTimer *)timer { } NSTimer默认运行在default mode下,default

IOS object-c 中定时器NSTimer的开启与关闭

调用一次计时器方法:  代码如下 复制代码 myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO];  //不重复,只调用一次.timer运行一次就会自动停止运行  重复调用计时器方法:  代码如下 复制代码 timer =  [NSTimer scheduledTimerWithTimeInterval:1

iOS中RunLoop机制浅探

iOS中RunLoop机制浅探 一.浅识RunLoop         RunLoop这个家伙在iOS开发中,我们一直在用,却从未注意过他,甚至都不从见过他的面孔,那个这个神秘的家伙究竟是做什么的?首先,我们先来观察一下我们的程序运行机制.         无论是面向对象的语言或是面向过程的语言,代码的执行终究是面向过程的.线程也一样,一个线程从开始代码执行,到结束代码销毁.就像HELLO WORLD程序,打印出字符串后程序就结束了,那么,我们的app是如何实现如下这样的机制的呢:app从运行开

iOS开发定时器的三种方法分享_IOS

前言 在开发中,很多时候我们需要用到定时器实时刷新某个数值.这个时候我们就需要用到定时器,这里,我为大家推荐三种方法,分别是:NSTimer.CADisplayLink.GCD.接下来我就一一介绍它们的用法.希望能帮到大家. 一.NSTimer(一般用于定时的更新一些非界面上的数据) 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:

ios-需要在IOS中设置延迟功能

问题描述 需要在IOS中设置延迟功能 需要一个延时器,进行23秒的延迟然后执行函数.应该怎么实现?用不用NSTimer? 解决方案 performSelector: withObject: afterDelay: 解决方案二: 简单点的话,使用performSelector: withObject: afterDelay: 方法 [self performSelector:@selector(delayMethod:) withObject:nil afterDelay:23];

iOS中 蓝牙2.0详解/ios蓝牙设备详解

版权声明:本文为博主原创文章,未经博主允许不得转载. 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 整体布局如下:     程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 ========================================================================== 指定根视图: [objc] view plain copy RootViewContr

定时器NSTimer

如果我们想让某个方法重复的执行,可以用ios提供的定时器NSTimer来完成,其实使用起来非常简单,分为三个步骤: 一.调用NSTimer scheduledTimerWithTimeInterval::target:: selector::userInfo::repeats或者scheduledTimerWithTimeInterval:invocation:repeats类方法来创建NSTimer对象. 其中的参数: timeInterval:指定每隔多少秒执行一次任务 invocation

iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 整体布局如下:     程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 ========================================================================== 指定根视图: RootViewController * rootVC = [[RootViewController alloc] init]

IOS中的webView加载HTML_IOS

在日常开发中,我们为了效率会用到很多很多的WebView,比如在做某个明细页面的时候我们返回给你的可能是一个html字符串,我们就需要将当前字符串展示到webView上面,所以我们对HTML标签需要有一定的认识,下面我们来一起用html标签和JS写一个打地鼠游戏,这里我们主要讲解HTML标签的书写,只要如何和webView适配涉及到响应式布局我们下次讲解: 1.首先我们先新建一个html文件 2 完整html标签并且设置编码格式为UTF-8 3 在body里面增加十只老鼠图片,并且增加点击事件,