zoukankan      html  css  js  c++  java
  • IOS GCD定时器

    提到定时器,NStimer肯定是我们最为熟悉的。

    但是NStimer有着很大的缺点,并不准确。

    通俗点说,就是它该做他的事了,但是由于其他事件的影响,Nstimer会放弃他应该做的。

    而GCD定时器,是不会发生这种事情的。

    GCD严格按照规定好的规格去做事。

    前面介绍RunLoop 的时候已经介绍了NSTimer。

    这里就不在介绍了。

    在这里着重介绍一下GCD定时器。

    首先,我们知道NStimer是在RunLoop的基础上执行的,然而RunLoop是在GCD基础上实现的,所以说GCD可算是更加高级。

    先看一下演示效果

    一些细节在代码注释中

    //
    //  ViewController.m
    //  CX GCD 定时器
    //
    //  Created by ma c on 16/3/30.
    //  Copyright © 2016年 xubaoaichiyu. All rights reserved.
    //
    
    #import "ViewController.h"
    
    NSInteger count = 0;
    
    @interface ViewController ()
    
    //注意**这里不需要✳️号 可以理解为dispatch_time_t 已经包含了
    @property (nonatomic, strong)dispatch_source_t time;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        
        NSLog(@"欢迎来到旭宝爱吃鱼的博客");
        //获得队列
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
        //创建一个定时器
        self.time = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
        //设置开始时间
        dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC));
        //设置时间间隔
        uint64_t interval = (uint64_t)(2.0* NSEC_PER_SEC);
        //设置定时器
        dispatch_source_set_timer(self.time, start, interval, 0);
        //设置回调
        dispatch_source_set_event_handler(self.time, ^{
           
            NSLog(@"旭宝爱吃鱼");
            //设置当执行五次是取消定时器
            count++;
            if(count == 5){
                
                dispatch_cancel(self.time);
                
            }
        });
        //由于定时器默认是暂停的所以我们启动一下
        //启动定时器
        dispatch_resume(self.time);
        
    }
    @end

    在前面说了,GCD是不会发挥不稳定的因此我们测试一下,在这里我们演示一下,就不展示代码了

    (添加一个TextView即可)

  • 相关阅读:
    ASP.NET MVC 重点教程一周年版 第二回 UrlRouting
    ASP.NET MVC 重点教程一周年版 第三回 Controller与View
    DynamicData for Asp.net Mvc留言本实例 下篇 更新
    Asp.net MVC视频教程 18 单选与复选框
    使用ASP.NET MVC Futures 中的异步Action
    ASP.NET MVC RC 升级要注意的几点
    ATL、MFC、WTL CString 的今生前世
    msvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
    关于Windows内存的一些参考文章
    Windows访问令牌相关使用方法
  • 原文地址:https://www.cnblogs.com/xubaoaichiyu/p/5339218.html
Copyright © 2011-2022 走看看