iOS 定时器的用法 NSTimer ------5.20

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.0target: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.5target: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;
}
//下面代码简单而有价值myTimer = [NSTimer
scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer)
userInfo:nil
repeats:NO];    //不重复,只调用一次。timer运行一次就会自动停止运行 

重复调用计时器方法:
timer
=  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self
selector:@selector(function:) userInfo:nil
repeats:YES]; 
//每1秒运行一次function方法。 

停止timer的运行,但这个是永久的停止:
//取消定时器 
[timer
invalidate]; 

要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:
首先关闭定时器不能使用上面的方法,应该使用下面的方法:
//关闭定时器 
[myTimer
setFireDate:[NSDate
distantFuture]]; 

然后就可以使用下面的方法再此开启这个timer了://开启定时器[myTimer
setFireDate:[NSDate
distantPast]]; 
例子:比如,在页面消失的时候关闭定时器,然后等页面再次打开的时候,又开启定时器。
(主要是为了防止它在后台运行,暂用CPU)可以使用下面的代码实现:
//页面将要进入前台,开启定时器 
-(void)viewWillAppear:(BOOL)animated 

    //开启定时器 
    [scrollView.myTimer
setFireDate:[NSDate
distantPast]]; 


//页面消失,进入后台不显示该页面,关闭定时器 
-(void)viewDidDisappear:(BOOL)animated 

    //关闭定时器 
    [scrollView.myTimer
setFireDate:[NSDate
distantFuture]]; 
}

时间: 2024-10-03 23:55:08

iOS 定时器的用法 NSTimer ------5.20的相关文章

iOS 中三种定时器的用法NSTimer、CADisplayLink、GCD

一.NSTimer 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; TimerInterval : 执行之前等待的时间.比如设置成1.0,就代表1秒后执行方法 target : 需要执行方法的对象. selector : 需要执行的方法 repeats : 是否需要循环 2.

iOS 计时器三种定时器的用法NSTimer、CADisplayLink、GCD

原文:http://www.cocoachina.com/ios/20160919/17595.html 一.三种计时器 二.全局倒计时 #import "ViewController.h" @interface ViewController () { CADisplayLink * displaylinked; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do

iOS三种定时器的用法NSTimer、CADisplayLink、GCD

一,NSTimer //创建方式1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; [timer invalidate]; //调用创建方法后,target对象的计数器会加1,直到执行完毕,自动减1.如果是循环执行的话,就必须手动关闭,否则可以不执行释放方法. //推荐-->创建方式2 NST

IOS OC 多任务定时器 NSRunLoop 管理 NSTimer

下面有两种做法 1.使用日期组件 NSDateComponents 2.使用NSString 生成一个日期 //  创建一个日历对象 NSCalendar *calendar = [NSCalendar currentCalendar]; //  创建日期组件 NSDateComponents *dc = [[NSDateComponents alloc]init]; //  设置当前时间 [dc setCalendar: calendar]; [dc setYear: 2014]; [dc s

IOS中NSdate用法

// date方法返回的就是当前时间(now) 02. NSDate *date = [NSDate date]; 03.// now: 11:12:40 04.// date: 11:12:50 05. date = [NSDate dateWithTimeIntervalSinceNow:10];//返回当前时间10秒后的时间 06. // 从1970-1-1 00:00:00开始 07. date = [NSDate dateWithTimeIntervalSince1970:10];//

IOS中NSSarry用法

一.创建数组 // 创建一个空的数组 02.NSArray *array = [NSArray array]; 03.// 创建有1个元素的数组 04.array = [NSArray arrayWithObject:@"123"]; 05.// 创建有多个元素的数组 06.array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil nil]; 07.NSArray *arr

分享Spring Scheduled定时器的用法

摘要:在coding中经常会用到定时器,指定每隔1个小时,或是每天凌晨2点执行一段代码段,若是使用java.util.Timer来做这种事情,未免重复造轮子.幸亏Spring中封装有定时器,而且非常好用,采用注解的形式配置某时某刻执行一段代码段.在之前的项目中使用过一次,下面就把代码.配置一并分享与大家. 关键词:Spring, JAVA, Scheduled, 定时器 一. 首先写一个Handler接口(“定时器Handler”),用以说明实现这一接口的类做的处理逻辑都是由定时器驱动的. 1

IOS NSUserDefaults 讲解 用法

IOS NSUserDefaults 讲解 用法 NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息咯. 因为如果使用自己建立的plist文件什么的,还得自己显示创建文件,读取文件,很麻烦,而是用NSUserDefaults则不用管这些东西,就像读字符串一样,直接读取就可以了. NSUserDefaults支持的数据格

javascript中window与document对象、setInterval与setTimeout定时器的用法与区别

一.写在前面 本人前端菜鸟一枚,学习前端不久,学习过程中有很多概念.定义在使用时容易混淆,在此给向我一样刚踏入前端之门的童鞋们归纳一下.今天给大家分享一下js中window与document对象.setInterval与setTimeout定时器的用法与区别.讲得不对的地方,烦请大家指正,还望前辈.大牛多多指教! 二.window对象与document对象的用法和区别 window是全局对象,document是window对象的一个属性它也是一个对象.如图: document对象指的页面这个文档