iOS几种常见计时器

作者: 上北以北 | 来源:发表于2017-06-02 09:59 被阅读104次

    1,最常见的计时器NSTimer (默认放到defaultModel的runloop中,会受到runloop的影响)

    //iOS1010以后的方法它类似,参数一:时间间隔参数二:是否一直执行

    [NSTimer timerWithTimeInterval:0.1 repeats:YES block:^(NSTimer *_Nonnull timer) {

    NSLog(@"nstimeing");

    }];

    //唯一结束NSTimer计时器方法

    [timer invalidate];

    2,CA计时器(不用设置时间间隔,每秒运行60次.默认放到defaultModel的runloop中,会受到runloop的影响)

    //创建计时器

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:selfselector:@selector(timerCall:)];

    //添加到runloop中

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

    //调用方法

    - (void)timerCall:(CADisplayLink *)link {

    NSLog(@"linking");

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 *NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

    //结束计时器的唯一方法

    [link invalidate];

    });

    }

    3,GCD计时器,(不受runloop影响,一般用在轮播图等不需要受到runloop影响的情况下)

    //GCD计时器在GCD资源里面

    dispatch_source_t timer =dispatch_source_create(&_dispatch_source_type_timer, 0, 0,dispatch_get_main_queue());

    //调用GCD的set方式

    //参数:1,GCD计时器    2,延迟几秒后开始执行   3,计时器间隔    4,计时器精度

    dispatch_source_set_timer(timer,DISPATCH_TIME_NOW,0.1*NSEC_PER_SEC, 0ull*NSEC_PER_SEC);

    //handle方法(该方法在开启了计时器时调用)

    dispatch_source_set_event_handler(timer, ^{

    NSLog(@"GCDtimering");

    });

    //开启计时器

    dispatch_resume(timer);

    //GCD停止计时器方法,会触发dispatch_source_set_cancel_handler方法

    dispatch_source_cancel(timer);

    dispatch_source_set_cancel_handler(timer, ^{

    //如果在非arc模式下可以在该方法里释放掉timer  (dispatch_release(timer);)

    NSLog(@"计时器已经停止了");

    });

    相关文章

      网友评论

        本文标题:iOS几种常见计时器

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