随笔 - 99,  文章 - 0,  评论 - 0,  阅读 - 33397

1、要是用一个定时器,首先要定义一个定时器:

@property(strong,nonatomic)NSTimer *myTimer;//定时器

2、初始化,初始化有两种方式:

第一种:

+ (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;

这两种初始化方式是有区别的:假如你用第一种就要自己将这个计时器加入主循环中,否则不会调用selector后面的方法,但是第二种就是在初始化一个定时器的同时直接将这个定时器加入主循环,所以并不用自己添加,下面举例:

第一种示例:

//初始化定时器

imer=[NSTimer timerWithTimeInterval:5 target:self selector:@selector(startLoction) userInfo:nil repeats:YES];

在初始化之后并不会调用,在添加下面这句将定时器加入主循环中的代码5秒才开始调用startLocation方法,又要repeats:YES,所以这里是循环调用,假如NO只调用一次。

//将定时器加入主循环中

[NsRunloop mainRunLoop] addTimer:_myTimer forMode:NsDefaultRunLoopMode];

//初始化定时器

imer=[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(startLocation) userInfor:nil repeats:YES];

这种方式就是该定时器将在初始化时指定的timeInterval秒后自动触发(也就是在这句代码写完的后5秒循环调用startLocation方法)。

3、假如要立即开始:

//开启定时器

[_myTimer setFireDate:[NSDate distantPast]];

在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前执行的计划;(也就是在立即调用后,5秒之后又会调用启动定位的方法)

在不重复执行的定时器中调用此方法,立即触发后,就会是这个定时器实效。(立即调用完就结束)

4、要想实现:先停止,然后在某种情况下在此开启运行timer,可以使用下面的方法:

首先关闭定时器不能使用上面的方法,应该使用下面的方法

关闭定时器:

//关闭定时器

[_myTimer setFierDate:[NSDate distantFuture]];

5、取消定时器:

//取消定时器

[_myTimer invalidate];

_myTimer = nil;

停止timer的运行,这个是永久的停止,这也是唯一一个可以将计时器从runloop中移除的方法。

这里要注意一下:

NSTimer可以精确到50-100毫秒

NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个执行点,那么久pass继续执行其他的计划。

 

posted on   强者VS弱者  阅读(879)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2016-05-11 5、清理mac缓存和关闭后台运行程序
点击右上角即可分享
微信分享提示