• GCD定时器


    代码如下:

     1 #import "ViewController.h"
     2 @interface ViewController ()
     3 /** 定时器(不用带*,因为dispatch_source_t本身是一个类) */
     4 @property (strong, nonatomic)dispatch_source_t timer;
     5 @end
     6 @implementation ViewController
     7 - (void)viewDidLoad {
     8     [super viewDidLoad];
     9 }
    10 
    11 int count = 0;
    12 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    13 {
    14     //获得队列
    15     dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    16     //创建一个定时器(dispatch_source_t本质还是一个OC对象,需要用强引用)
    17     self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    18     //设置定时器的各种属性(几时开始任务,每隔多久执行一次)
    19     //GCD的时间参数是纳秒(1秒=10的9次方纳秒)
    20     dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)3.0 * NSEC_PER_SEC); //表示三秒后开始执行
    21     uint64_t interval = (uint64_t)(2.0 * NSEC_PER_SEC);//表示时间间隔2.0秒执行一次
    22     dispatch_source_set_timer(self.timer, start, interval, 0);
    23     //设置回调
    24     dispatch_source_set_event_handler(self.timer, ^{
    25         NSLog(@"------%@-----",[NSThread currentThread]);
    26     });
    27     count++;
    28     if (count == 3) {
    29         //当执行完3次之后停止(注意是强引用,所以设置为空)
    30         dispatch_cancel(self.timer);
    31         self.timer = nil;
    32     }
    33     //启动定时器
    34     dispatch_resume(self.timer);
    35 }
    36 @end

     上面有一个明显的错误,只有把

    1 count++;
    2 if (count == 3) {
    3   //当执行完3次之后停止(注意是强引用,所以设置为空)
    4   dispatch_cancel(self.timer);
    5   self.timer = nil;
    6 }

    放入到回调内(dispatch_source_set_event_handler方法中),到执行3次的之后才能停止。

    因为如果放在外面,后面的代码只执行一次,count永远为0

    放入回调中,定时器每执行一次都会调用一次dispatch_source_set_event_handler,让count递增一次,到了执行第三次后就会停止!!

    注:

    1、NSTimer不准可以用GCD的定时器,(精确到纳秒)

    2、GCD定时器不受RunLoop中Mode的影响

  • 相关阅读:
    namespace for c++
    [爬虫]Python爬虫基础
    为什么局域网IP是192.168开头?
    [Python基础]Python中remove,del和pop的区别
    权限控制(delphi actionlist)
    Delphi ActionList详解
    充分利用HTML标签元素 – 简单的xtyle前端框架
    好用的侧边栏菜单/面板jQuery插件
    最新的手机/移动设备jQuery插件
    有用的jQuery布局插件推荐
  • 原文地址:https://www.cnblogs.com/hissia/p/5590087.html
Copyright © 2020-2023  润新知