• 「iOS」你会用几种方法实现计时器


    1.NSTimer
    存在一定的误差,不管是一次性的还是周期性的timer得实际触发事件的时间,都会与所加入的runloop和runloopMode有关,如果此runloop正在执行一个连续性的运算,timer就会被延时触发。

    //    创建方式1
        NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:YES];
        [timer1 invalidate];
    //    创建方式2==>推荐
        NSTimer *timer2 = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:YES];
    //    加入运行循环
        [[NSRunLoop mainRunLoop] addTimer:timer2 forMode:NSDefaultRunLoopMode];
        [timer2 invalidate];
    
    

    2.CADisplayLink
    CADisplayLink是一个能让我们以和屏幕刷新率同步的频率将特定的内容画到屏幕上的定时器类。CADisplayLink以特定模式注册到runloop后,每当屏幕显示内容刷新结束的时候,runloop就会向CADisplayLink指定的target发送一次指定的selector消息,CADisplayLink类对应的selector就会被调用一次。
    iOS设备的屏幕刷新频率是固定的,CADisplayLink在正常情况下会再每次刷新结束后都被调用,精确度相当高。使用场合相对专一,适合做UI的不同重绘,比如自定义动画引擎或者视频播放的渲染。不需要在格外关心屏幕的刷新频率了,本身就是跟屏幕刷新同步的。

    //创建对象
    CADisplayLink *display = [CADisplayLink displayLinkWithTarget:self selector:@selector(action:)];
    //加入当前循环
        [display addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    //销毁
        [display invalidate];
        
    

    3.GCD
    NSTimer是在runloop的基础上执行的,然而runloop是在GCD的基础上实现的,所以说GCD可算是更加高级的。

    //    获得队列
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    //    创建一个定时器
        dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    //    设置定时器
        dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1000 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
        dispatch_source_set_event_handler(timer, ^{
    //        触发事件
    //        取消定时器
            dispatch_cancel(timer);
        });
    //    启动定时器
        dispatch_resume(timer);
    
  • 相关阅读:
    加载db2的驱动类,连接数据库URL下的特定schema并插入数据
    vi修改编辑文件提示Write Error!(File System full?)研究与解决
    java实现一次性压缩多个文件
    java转义字符
    统计数字问题0
    系统开关机
    统计数字问题1
    算法的力量
    半数集0
    wBox是一款轻量级的弹出窗口插件
  • 原文地址:https://www.cnblogs.com/JanChuJun/p/10102186.html
Copyright © 2020-2023  润新知