iOS中的定时器

作者: 落雪无痕_t | 来源:发表于2016-07-17 22:02 被阅读343次

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

  • NSTimer
    NSTimer也分为两种情况
    • 一个方法是自动加入当前线程的RunLoop中,并且运行模式为NSDefaultRunLoopMode模式,不需要手动开启,代码如下
/*
     第一个参数:时间间隔
     第二个参数:方法的调用者
     第三个参数:执行的方法
     最后一个参数:是否需要重复
     */
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(demo1) userInfo:nil repeats:YES];

注意:如果想要在有scrollView拖动的情况下定时器也能使用必须手动切换其运行模式到NSRunLoopCommonModes

//切换到NSRunLoopCommonModes
    [[NSRunLoop mainRunLoop]addTimer:timer forMode:NSRunLoopCommonModes];
  • 另外一种创建方式必须要手动把NSTimer对象加入到对应的RunLoop中,并且制定运行模式才可以运行,代码如下:
/*
     第一个参数:时间间隔
     第二个参数:方法的调用者
     第三个参数:执行的方法
     最后一个参数:是否需要重复
     */
    NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(demo) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
  • CADisplayLink
    这个定时器和NSTimer有很多相同之处,它也是依赖于RunLoop运行的,唯一的区别是,它的频率是60Hz,创建方式如下:
 CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(demo)];
    [link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

以下这幅图中可以看出CADisplayLink的执行频率
CADisplayLink的调用频率图:


Snip20160717_6.png

NSTimer的调用频率图:


Snip20160717_7.png
  • GCD定时器
    CGD定时器就和NSTimer以及CADisplayLink有很多不同之处了
    • 首先,CGD定时器是独立于RunLoop执行的
    • 其次,CGD定时器的最小时间间隔单位是纳秒(1秒=10的10次方纳秒)
    • 然后,CGD定时器的创建和使用是一套纯C语言库,用起来相对来讲麻烦一下
      话不多说直接上代码
//创建
 dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,queue);
//这里必须有一个强指针指向,因为GCD定时器本质还是一个OC对象
 self.timer = timer;
//设置定时器开始时间,这里的时间单位是纳秒
 dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW,2 * NSEC_PER_SEC);
//设置定时器
 dispatch_source_set_timer(timer,startTimer,(int64_t)(2 * NSEC_PER_SEC),0);
//设置定时器所做的事情,block回调
 dispatch_source_set_event_handler(timer,^{
 //定时器要做的事情
 });
//CGD定时器默认是暂停的,需要手动开启
 dispatch_resume(timer);
 //定时器的关闭
 dipatch_cancel(self.timer);
self.timer = nil

关于常用的定时器就介绍这么多,希望对大家有所帮助
作者:胥鸿儒

相关文章

  • iOS进阶-谈谈定时器

    目录 iOS提供定时器API 定时器开发中的坑 一、 iOS提供定时器API 二、定时器开发中的坑 2.1、必须办...

  • iOS中的定时器

    点击这里>> cocoaChina: iOS中的定时器 iOS中定时器有三种,分别是NSTimer、CADispl...

  • GCD定时器使用

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

  • iOS:NSTimer的几种创建方式

    在iOS开发中,经常会用到定时器,iOS中常用的定时器有三种:NSTimer,GCD,CADisplayLink。...

  • 定时器的使用介绍

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

  • iOS Timer

    iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。...

  • iOS三大定时器

    iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。...

  • Flutter 网络请求类封装及搜索框实现

    Flutter 中定时器的使用 在 Flutter 中定时器相对 iOS 来说比较好的一点就是定时器事件的执行不会...

  • 无标题文章

    iOS NSTimer使用详解-开启、关闭、移除 定时器定时器详解ios定时器关闭定时器NSTimer 1、要使用...

  • iOS 定时器耗电探究

    iOS开发中的几种定时器 iOS开发中定时器实现方式大致有三种,一种是Timer实现,一种是通过GCD自己创建,另...

网友评论

    本文标题:iOS中的定时器

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