美文网首页
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中的定时器(五)

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