美文网首页
GCD对timer的一种实现

GCD对timer的一种实现

作者: lzh_coder | 来源:发表于2017-09-14 16:59 被阅读18次

    通常我们在主线程创建timer,此外,timer需要结合runloop才能实现。

    如果有这样一个需求,在非主线程中实现一个timer。我们可能需要设计一个非主线程,创建它的runloop。。比较麻烦。

    GCD提供了一个相对优雅的做法。参考下面代码,是一个倒计时的例子:

    __blockinttimeout =60;

    dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    //创建一个timer的source。

    dispatch_source_t _timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,queue);

    dispatch_source_set_timer(_timer,dispatch_walltime(NULL,0),1.0*NSEC_PER_SEC,0);

    WeakSelf

    dispatch_source_set_event_handler(_timer, ^{

    StrongSelf

    if(timeout==0){

    dispatch_source_cancel(_timer);

    dispatch_async(dispatch_get_main_queue(), ^{

    //更新UI

    });

    }else{

    int seconds = timeout %61;

    NSString*strTime = [NSStringstringWithFormat:@"%.2d秒", seconds];

    dispatch_async(dispatch_get_main_queue(), ^{

    //更新主线程UI。

    });

    timeout--;

    }

    });

    dispatch_resume(_timer);

    相关文章

      网友评论

          本文标题:GCD对timer的一种实现

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