1 在开发的过程中,定时器是一个必不可少的功能,我们可以用NStimer,CADisplayLink,GCD Timer
CADisplayLink 是一个保持屏幕同频率的计时器类,一般用在动画或者视频的渲染,不是作为定时器事件来用的。
NSTimer不多讲,这个刚入门的iOS开发者用的大多都是这个,而且大部分情况下能够实现我们的功能。比如取消已经在队列的任务。这个就需要用到GCD Timer了
而且GCD相对于NStimer有很多优势
1 GCD的定时器和NSTimer是不一样的,NSTimer受RunLoop影响,但是GCD的定时器不受影响,因为RunLoop也是基于GCD的
2 dispatch_source_t支持的类型比较多,不仅仅是timer,还有以下类型
1 Timer dispatch source:定期产生通知
2 Signal dispatch source:UNIX信号到达时产生通知
3 Descriptor dispatch source:各种文件和socket操作的通知 数据可读  数据可写 文件在文件系统中被删除、移动、重命名 文件元数据信息改变
4 Process dispatch source:进程相关的事件通知  当进程退出时 当进程发起fork或exec等调用 信号被递送到进程
5  Mach port dispatch source:Mach相关事件的通知
Custom dispatch source
学会GCD Timer你不会吃亏
下面只介绍dispatch_source定时器的实现 先上代码
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW,HXMessageShowTime * NSEC_PER_SEC),10 * NSEC_PER_SEC  , 0);dispatch_source_set_event_handler(timer, ^{[self doSomething];dispatch_cancel(timer);});dispatch_resume(timer);}];
1 首先创建一个dispatch_source_create timer类型的信号量。
2 调用dispatch_source_set_timer设置信号的频率
3 用dispatch_source_set_event_handler设置定时器出发的事件
4 启用定时器。
5 在handler里面完成我们要做的工作,取消定时器。
我们也可以在程序的任何地方随时dispatch_cancel 这个定时器,这样就能取消定时器事件了

用dispatch_source实现可取消的定时器相关推荐

  1. android定时器取消,Android定时器崩溃取消

    我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款.Android定时器崩溃取消 然后我想要做的是点击一个按钮,然后创建一个电子邮件.除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃 ...

  2. javascript的内置对象以及BOM(定时器,location)

    javascript的内置对象以及BOM 内置对象 Number 代码演示 <script>//1. parseFloat() 将传入的字符串浮点数转为浮点数document.write( ...

  3. rto初始化和计算_TCP系列13—重传—3、协议中RTO计算和RTO定时器维护

    从上一篇示例中我们可以看到在TCP中有一个重要的过程就是决定何时进行超时重传,也就是RTO的计算更新.由于网络状况可能会受到路由变化.网络负载等因素的影响,因此RTO也必须跟随网络状况动态更新.如果T ...

  4. 微信小程序 等待几秒、_微信小程序—setTimeout定时器的坑

    背景 实验室需要将项目的app搬到微信的小程序上,终于知道为什么程序员是手艺人了,只要有需求,就要想方设法去填充这种需求,去年是小程序的元年了可以说,去年冬天一个叫跳一跳的小程序游戏出现在我的微信中, ...

  5. java observable 使用_如何使用rxjava2取消Observable.timer?

    我在我的代码重试机制,我用下面的行执行我重试逻辑.例如,我生成一个随机毫秒来延迟执行.当计时器滴答到30 * 1000毫秒时,我想取消这个计时器.我如何取消这个定时器并立即执行我的逻辑.如何使用rxj ...

  6. js 定时器_Node.js实战6:定时器,使用timer延迟执行

    setTimeout 在nodejs中,通过setTimeout函数可以达到延迟执行的效果,这个函数也常被称为定时器. 一个简单的例子: console.log( (new Date()).getSe ...

  7. 29【定时器和延时器】

    定时器和延时器 1.定时器 1.1 基本介绍 setInterval() 函数可以重复调用一个函数,在每次调用之间有固定的时间间隔. Interval:间隔 <!DOCTYPE html> ...

  8. 说说 jBPM 工作流的定时器

    jBPM 定时器(Timer)实现了以下功能: timer 定义在 transition 元素中,当流程处于 state.task.sub-process 类型活动的等待状态时,会开始计算 timer ...

  9. 读Muduo源码笔记---8(定时器)

    muduo的定时器由三个类实现,TimerId.Timer.TimerQueue. 1.采用timer_create函数得到定时器对象 timerfd_create把时间变成了一个文件描述符,该&qu ...

最新文章

  1. struts2+hibernate3+spring3(ssh2)框架下的web应用(1)
  2. Java--多线程编程
  3. java和net共同点,Java和.NET中的垃圾回收机制比较
  4. data类型的Url的格式
  5. _thread_in_vm_Java Thread类的静态void sleep(long time_in_ms,int time_in_ns)方法,带示例
  6. JVM学习-G1回收器
  7. python 核心编程 第一部分
  8. Docker可视化界面(Consul+Shipyard+Swarm+Service Discover
  9. IONIC2/3解决文本框获取焦点的问题
  10. cacti不能实时刷新流量图_解决Cacti无法正常监视超过100M以上流量的问题
  11. ORACLE常用性能监控SQL
  12. 我们不一样!告诉你百度是如何做智能流量异常检测的
  13. JAVA实现模板word文档导入,Java依据word模板生成word文档之后台解析和实现及部分代码(一)...
  14. 在线JSON转换成Excel文件工具
  15. IO有Buffered IO 和 Direct IO
  16. 添加常用查询新增方法
  17. 对高校一线教师开展翻转课堂的建议
  18. Solidworks模型导入Unity,最方便的做法!★
  19. 全方位WordPress添加水印方法汇总
  20. 东北大学大学物理实验报告——2.4分光计的调节与使用

热门文章

  1. 计算机控制系统AD实验报告,实验一AD转换实验报告
  2. linux read timed out,【转】网络异常模拟 read timed out
  3. mac查询端口号和关闭端口号
  4. 服务器开发必备-【数据库】Redis集群篇
  5. core net 消费kafka_消息中间件之:Kafka、ActiveMQ、RabbitMQ、RocketMQ
  6. 【物联网】10.物联网数据库 - SQL
  7. 网页html里播放苹果音频m4a格式文件
  8. Libcurl的编译_HTTP/HTTPS客户端源码示例
  9. C++浅谈构造函数和析构函数
  10. 【特征提取】pd.get_dummies() 详解(One-Hot Encoding)