美文网首页
GCD中的定时器(五)

GCD中的定时器(五)

作者: 沈正方 | 来源:发表于2017-04-03 16:56 被阅读73次

一. GCD中定时器的使用方法

  1. 创建一个队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
  1. 创建一个GCD的定时器
/*
第一个参数:说明这是一个定时器
第四个参数:GCD的回调任务添加到那个队列中执行,如果是主队列则在主线程执行
*/
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
  1. 设置定时器的开始时间,间隔时间以及精准度
1.设置开始时间,三秒钟之后调用
//NSEC_PER_SEC : 1.0 * 10的9次方 纳秒
//注意点:GCD定时器中的时间以纳秒为单位(面试)
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW,3.0 * NSEC_PER_SEC);
2.设置定时器工作的间隔时间
uint64_t intevel = 1.0 * NSEC_PER_SEC;
  1. 设置定时器的参数(开始时间,间隔时间,精准度)
1.第一个参数:要给哪个定时器设置
2.第二个参数:定时器的开始时间DISPATCH_TIME_NOW表示从当前开始
3.第三个参数:定时器调用方法的间隔时间
4.第四个参数:定时器的精准度,如果传0则表示采用最精准的方式计算,如果传大于0的数值,则表示该定时切换i可以接收该值范围内的误差,通常传0
该参数的意义:可以适当的提高程序的性能
dispatch_source_set_timer(timer, start, intevel, 0 * NSEC_PER_SEC);
  1. 设置定时器开启后回调的方法
/*
第一个参数:要给哪个定时器设置
第二个参数:回调block
*/
dispatch_source_set_event_handler(timer, ^{
NSLog(@"------%@",[NSThread currentThread]);
});
  1. 执行定时器
dispatch_resume(timer);
* 注意:`dispatch_source_t`本质上是OC类,在这里是个局部变量,需要强引用
先设置定时控制器强引用的属性
@property (nonatomic, strong) dispatch_source_t timer;
self.timer = timer;

二. GCD定时器补充

  • DISPATCH_SOURCE_TYPE_TIMER定时响应(定时器事件)
  • DISPATCH_SOURCE_TYPE_SIGNAL接收到UNIX信号时响应
  • DISPATCH_SOURCE_TYPE_READ IO操作,如对文件的操作、socket操作的读响应
  • DISPATCH_SOURCE_TYPE_WRITE IO操作,如对文件的操作、socket操作的写响应
  • DISPATCH_SOURCE_TYPE_VNODE 文件状态监听,文件被删除、移动、重命名
  • DISPATCH_SOURCE_TYPE_PROC 进程监听,如进程的退出、创建一个或更多的子线程、进程收到UNIX信号
  • 下面两个都属于Mach相关事件响应
    • DISPATCH_SOURCE_TYPE_MACH_SEND
    • DISPATCH_SOURCE_TYPE_MACH_RECV
  • 下面两个都属于自定义的事件,并且也是有自己来触发
    • DISPATCH_SOURCE_TYPE_DATA_ADD
    • DISPATCH_SOURCE_TYPE_DATA_OR

相关文章

  • GCD定时器使用

    iOS中的常用定时器分为这几类: NSTimer CADisplayLink GCD定时器 选择GCD定时器原因:...

  • GCD定时器的实现

    GCD定时器 GCD定时器不受RunLoop约束,比NSTimer更加准时 证明,实现GCD定时器

  • iOS - GCD中的定时器

    GCD定时器优点:① GCD定时器不受RunLoop约束② 比NSTimer更加准时。 GCD定时器用法敲 dis...

  • GCD定时器

    GCD定时器 GCD定时器不受RunLoop的影响,调用频率比较固定

  • tableView或者scrollView滑动时 定时器 不响应

    先写解决办法 1. 2. 使用GCD创建定时器。GCD创建定时器不收Runloop的影响,并且GCD的定时器更精准...

  • 定时器的使用介绍

    iOS中的定时器大致分为这几类: NSTimer CADisplayLink GCD定时器 (一)NSTimer ...

  • 18-内存管理 01(定时器)

    一、定时器 NSProxy 二、GCD定时器 GCD定时器操作的系统内核,比NSTimer准时;当有scrollv...

  • GCD中的定时器(五)

    一. GCD中定时器的使用方法 创建一个队列 创建一个GCD的定时器 设置定时器的开始时间,间隔时间以及精准度 设...

  • iOS中的定时器

    定时器是开发中常用一中工具,定时器常用的为NSTimer,CADisplayLink以及GCD定时器 NSTime...

  • gcd中的定时器

    runloop中的定时器会受模式的影响。gcd中的定时器不会。 在代码中敲出dispatch_source 就打出...

网友评论

      本文标题:GCD中的定时器(五)

      本文链接:https://www.haomeiwen.com/subject/eekoottx.html