在使用定时器时,我们经常使用NSTimer,但是由于NSTimer会受RunLoop影响,当RunLoop处理的任务很多时,就会导致NSTimer的精度降低,所以在一些对定时器精度要求很高的情况下,应该考虑采用GCD定时器,实现代码如下:

// 队列(队列时用来确定该定时器存在哪个队列中)
dispatch_queue_t queue = dispatch_get_main_queue(); // 创建GCD定时器
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, , , queue); dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, * NSEC_PER_SEC); // 开始时间
uint64_t interval = * NSEC_PER_SEC; // 时间间隔 // 设置GCD定时器开始时间,间隔时间
dispatch_source_set_timer(_timer, start, interval, ); // GCD定时器处理回调方法
dispatch_source_set_event_handler(_timer, ^{
NSLog(@"---------%@", [NSThread currentThread]);
}); // GCD定时器启动,默认是关闭的
dispatch_resume(_timer); /**
dispatch_source_cancel(_timer); // 异步取消调度源
     _timer = nil; // 将 dispatch_source_t 置为nil */

更加精确的定时器:dispatch_source_t的更多相关文章

  1. GCD之定时器dispatch_source_t(转载暂时未完全理解)

    #import "ViewController.h" @interface ViewController (){ IBOutlet UIButton *l_timeButton; ...

  2. iOS---->CADisplayLink、比NSTimer更精确的定时器

    什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个r ...

  3. linux定时器

    我们常常有设置系统在某一时间执行相应动作的需求,比如设置电脑什么时候自动锁屏,什么时候自动关机,设置应用程序什么时候自动运行,什么时候自动退出.这些与时间相关的功能,都需要依靠操作系统中的定时器来实现 ...

  4. Object-C定时器,封装GCD定时器的必要性!!! (一)

    实际项目开发中经常会遇到延迟某件任务的执行,或者让某件任务周期性的执行.然后也会在某些时候需要取消掉之前延迟执行的任务. iOS中延迟操作有三种解决方案: 1.NSObject的方法:(对象方法) p ...

  5. 我的runloop学习笔记

    前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...

  6. 4.3 多线程进阶篇<中>(GCD)

    更正:队列名称的作用的图中,箭头标注的有些问题,已修正 本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 本文源码 Demo 详见 Gith ...

  7. iOS并发编程笔记【转】

    线程 使用Instruments的CPU strategy view查看代码如何在多核CPU中执行.创建线程可以使用POSIX 线程API,或者NSThread(封装POSIX 线程API).下面是并 ...

  8. C#学习笔记之线程 - 使用线程

    基于事件的异步模式 (EAP -- The Event-Based Asynchronous Pattern) EAP提供了一个简单的办法,通过它的类能够提供多线程能力,而不需显式的开启或管理线程.它 ...

  9. epoll和select区别

    先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一 ...

随机推荐

  1. 用友U8 归纳采购退货结算三种情况

    对应版本: 8.52 问题现象: 客户经常处理退货结算的问题 问题原因: 应系统掌握各种情况 解决方案: 结算前全额退货即已录入采购入库单,但未进行采购结算,并且全额退货.填制一张全额数量的红字采购入 ...

  2. 编译安装 varnish-4.1.2和yum 安装 varnish-4.0.3

    vanish可以让用户自己选择缓存数据是存于内存还是硬盘,存于内存一般基于二八法则即常访问的数据是磁盘存储的总数据五分之一,因此内存也应该是硬盘文件大概五分之一.如果有多台vanish则,总内存满足即 ...

  3. JavaScript 学习笔记——cssText

    平常编写代码,更改一个元素样式的时候,自己都是用 obj.style.width = "200px"; obj.style.position = "absolute&qu ...

  4. 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(0)

    前些日子工作不太忙,自己开发了一个web框架用于以后快速开发,现在分享出来. 系统没有使用各种复杂的东西,也没有太多的层次,有兴趣的可以研究一下.

  5. mongodb防火墙配置

    http://ruby-china.org/topics/20128 https://docs.mongodb.com/manual/tutorial/configure-linux-iptables ...

  6. Ajax:一种网页开发技术(Asynchronous Javascript + XML)

    创建新的 XMLHttpRequest 对象(Ajax 应用程序的核心): <script language="javascript" type="text/jav ...

  7. POCO库——Foundation组件之日期时间DateTime

    日期时间DateTime:内部提供多个设计计时器.日期.时区.时间戳等: Clock.h :Clock时钟计时类,_clock:Int64类型时钟值,CLOCKVAL_MIN.CLOCKVAL_MAX ...

  8. Flume(1)使用入门

    一.概述: Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. 当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X ...

  9. SSH ProxyCommand

    简单的说就是SSH层面的代理服务器,实现通过跳板机执行SSH相关命令到目标机器的代理服务.

  10. 配置Visual Studio Code在Mac上作为.NET Core的IDE

    通过邮件发一文档测试一下. 关于Visual Studio Core 官网:https://www.visualstudio.com/en-us/products/code-vs.aspx 安装 也是 ...