ios nstimer实现延时_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= [NSTimertimerWithTimeInterval:3.0target:selfselector:@selector(timerFired:)userInfo:nilrepeats:NO];

[[NSRunLoopcurrentRunLoop]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对象//实例化timerself.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

Scheduled Timers & Using Selector

-

(

IBAction

)

startOneOffTimer:

sender

{

[

NSTimer

scheduledTimerWithTimeInterval:

2.0

target:

self

selector:

@selector

(

targetMethod:

)

userInfo:

[

self

userInfo

]

repeats:

NO

];

}

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

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

// 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

;

}

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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序产品的特点

认识小程序: 小程序:一种不需要下载安装,即可使用的应用。 小程序的特点: 开发成本低。 流畅的使用体验。 庞大的流量池可供使用。 用完即走,不占用手机内存,但是有使用记录供用户可方便的再次找回产品。…

数据库优化 - 多列索引经典题目

题目 假设某个表有一个联合索引(c1,c2,c3,c4)一下——只能使用该联合索引的c1,c2,c3部分 A where c1x and c2x and c4>x and c3x B where c1x and c2x and c4x order by c3 C where c1x and c4 x group by c3,c2 D where c1x and c5x order by c2,c3 …

nemesis什么车_狂野飙车9TrionNemesis介绍 S级车Trion复仇女神属性详解

狂野飙车9S级车Trion Nemesis介绍,狂野飙车9S级车Trion复仇女神属性详解,下面雨落就为大家带来狂野飙车9S级车Trion复仇女神的改装升级所需卡牌已经金币等攻略。【赛车属性】:S级车Trion Nemesis初始油量:4补充时间:15…

网站设计规范

网站不同于移动应用: 屏幕适配(屏幕尺寸、分辨率)。 交互方式不同,鼠标相对手指具备更精准的点击范围,有更多的控件状态。 在设计网站原型时,并没有具体的控件大小和条栏规范,需要注意相关设计…

产品设计七大定律

Alan Cooper(交互设计之父):除非有更好的选择,否则就遵从标准。 许多设计准则都基于人类心理学:人们如何感知、学习、推理、记忆,以及把意图转换为行动。 菲茨定律: 菲茨定律用来预测某点到目…

函数的定义

什么是函数? 先上一个函数格式, def 函数名(参数1,参数2):       #函数的定义函数名:这是一个解决什么问题的函数:param 参数1: 传入一个参数:param 参数2: 传入第二个参数:return: 返回一个列表                #函数…

插入网站连接_带你了解网站设计的五个基本步骤

网站制作设计并不是一件简单的事情,一个好的网站不但里面包含的内容要全面,而且还要能够持续运转,为我们带来流量。下面简单为大家介绍一下网站设计的基本步骤,希望能够帮助大家更好的了解网站建设。网站设计1、站点定位确定网站的…

内容型的产品该怎么做?

内容产品: 什么是内容型产品:以图文、视频/直播、音频等形式提供服务的产品形态。 例:抖音、快手、微博、今日头条、知乎、得到… 内容产品的发展: 内容产品生态: 内容产品用户角色及职责: 内容模型&#x…

ssh免密码登陆(三个节点master slave1 slave2)详细带命令版

准备工作: 首先修改三个节点的名称分别为master slave1 slave2。建议以vim /etc/sysconfig/network的方式修改 修改三个节点的/etc/hosts文件 如下形式: 192.168.43.202 master 192.168.43.253 slave1 192.168.43.113 slave2 前面为各自机器对应的IP 配置…

复杂电路简化经典例题_一天搞定考试系列之电路原理(3)

经过了前两章对阅读理解学习法的实践运用,想必大家知道该怎么做了,至于效果,我不敢保证对每个人都有效,欢迎大家实践后给予反馈,大家一起寻找更好的方法。下面进入第三章,需要说明的是前两章虽然简单但是很…

【前端】Github Pages 与域名关联简明教程

Github Pages 与域名关联简明教程 1. 向你的 Github Pages 仓库添加一个CNAME(一定要*大写*)文件 其中只能包含一个顶级域名,像这样: example.com如果你是用 hexo 框架搭建博客并部署到 Github Pages 上,每次 > hexo g > hexo d 后会把…

登录注册页怎么做

app常见页面: 引导页: 概念:第一次安装App或者更新App后第一次打开App时所展示的可以滑动的页面。 作用:主要是用于展示产品本身的一些核心功能点或者特色。 启动页: 概念:App被用户打开后,在启…

怎么把东西去掉修图_很多人花几千块学习商业修图,其实跟把钱扔了一样。?...

很多人花几千块学习商业修图,其实跟把钱扔了一样。我所说的商业修图是指那些杂志、明星修图,很多人觉得修杂志、明星就是大师,就非常厉害,其实商业修图重要的不是技术,而是资源、圈子;大部分人看作品也不是…

算法入门经典-第七章 例题7-2最大乘积

最大乘积 输入n个元素组成的序列s&#xff0c;你需要找出一个乘积最大的连续子序列。如果这个最大的成绩不是正数&#xff0c;应输入-1&#xff08;表示无解&#xff09;。输入0结束输入。1<n<18,-10<Si<10。 样例输入&#xff1a; 3 2 4 -3 样例输出&#xff1a; …

Golang_String常用操作

字符串操作&#xff1a; 字符操作不会影响原字符串&#xff0c;如果处理后又返回给原字符串则会改变&#xff0c;但一般是使用新变量接收处理 len&#xff1a;统计字符串的长度&#xff0c;但如果有中文时会出现乱码的情况&#xff0c;转换为range可以解决 func main() {str :…

h5页面生成图片分享到微信js_html2canvas 动态生成微信分享海报的优质js库

如何把网页上的内容用javascript来实现截图&#xff1f;今天分享的html2canvas就可以。介绍在微信项目中经常会遇到动态生成海报的需求&#xff0c;Web前端合成图片往往会使用canvas。canvas虽然强大&#xff0c;但用来合成海报非常繁琐&#xff0c;一不小心就几百行代码了。而…

去重+排序板子(set+map)

题意&#xff1a; 给定n个数&#xff0c;去重排序后输出个数和每个数 1.map实现 #pragma GCC optimize("O2") #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #i…

expires为session_面试必问:session,cookie和token的区别

点击上方蓝字关注我们 !session&#xff0c;cookie和token究竟是什么简述cookie&#xff0c;session&#xff0c;token作为面试必问题&#xff0c;很多同学能答个大概&#xff0c;但是又迷糊不清&#xff0c;希望本篇文章对大家有所帮助http是一个无状态协议什么是无状态呢&…

WINFORM 调用 Close 不会释放窗体

在以下两种情况下调用 Close 不会释放窗体&#xff1a;(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的&#xff1b;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下&#xff0c;需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。外部链接转载…

蓝凌ekp开发_蓝凌OA系统,蓝凌EKP,蓝凌KK__房地产案例应用__恒大集团

作为中国地产行业标杆&#xff0c;恒大集团拥有员工39000多人&#xff0c;在全国33个城市设立了分公司&#xff0c;在全国122个主要城市拥有大型项目229个。如何实现全集团的协同沟通&#xff1f;如何结合业务规范、统一流程&#xff1f;如何实现专业知识、业务案例和管理经验快…