美文网首页
定时器的几种常用用法

定时器的几种常用用法

作者: coming_168 | 来源:发表于2019-04-12 10:37 被阅读0次

    CADisplayLink定时器

    1.创建CADisplayLink定时器:当下一次屏幕刷新(刷帧)的调用(一秒钟刷新60)

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(change)];
    
    

    2.想要让CADisplayLink工作,必须得要把它添加到主运行循环当中

    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
    
    

    NSTimer定时器

    1.创建一个自动执行任务的定时器

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:@"12345" repeats:YES];
    

    2.想要让定时器在拖动其他控件时也不停止,必须要将运行的模式修改为NSRunLoopCommonModes

    • NSDefaultRunLoopMode (默认) : 同一时间只能处理一个任务
    • NSRunLoopCommonModes:可以分配一定的时间处理其他任务
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    

    3.定时器停止方法

    [timer invalidate];
    // self.timer = nil;
    

    CGD方式

        // 获取全局子线程队列
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        // 创建timer添加到队列中
        dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
        // 设置首次执行事件、执行间隔和精确度
        dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0.1 * NSEC_PER_SEC);
        // 处理事件block
        dispatch_source_set_event_handler(timer, ^{
            
        });
        // 激活timer
        dispatch_resume(timer);
        // 取消timer
    //    dispatch_source_cancel(timer);
    

    相关文章

      网友评论

          本文标题:定时器的几种常用用法

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