GCD定时器

使用NSTimer定时器有几个缺点,
1.分线程需要自动管理RunLoop,
2.精确度不太高。
而使用GCD定时器是没有这些缺点的。代码如下:

    @interface ViewController ()

    @property (nonatomic,strong) dispatch_source_t timer;

    @end

    @implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
        //创建一个队列
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        //dispatch_source_t 本质上是一个oc对象!!
        self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
        //GCD的时间参数
        dispatch_time_t start = DISPATCH_TIME_NOW;
        dispatch_time_t interval = 1 * NSEC_PER_SEC;
        dispatch_source_set_timer(self.timer, start, interval, 0);
        
        //设置定时器的回调
        dispatch_source_set_event_handler(self.timer, ^{
            
            NSLog(@"----%d",[NSThread isMainThread]);
            
        });
        
        //启动定时器
        dispatch_resume(self.timer);
    }    

打印的结果:
2017-06-13 21:55:34.777 GCDTimer[6623:2965563] ----0
说明该定时器是创建在分线程上了,销毁定时器可以调用

dispatch_source_cancel(_timer);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定时器的实现: GCD定时器优缺点: 1.它不需要显示的停掉定时器,由系统帮助我们处理。不需要考虑内存泄露问题。 ...
    frankisbaby阅读 144评论 0 0
  • 大家平时开发中使用最多的定时器应该是NSTimer了,但是,NSTimer同时也存在一些弊端:比如,有时候你要把它...
    忧郁的小码仔阅读 1,022评论 0 4
  • 定时器分为三种:1、NSTimer 2、CADisplayLink 3、GCD实现 今天着重学习一下GCD中...
    这个夏天有点冷阅读 1,014评论 0 0
  • 相信大家在开发中都会使用到定时器, 但又常常对定时器的循环引用问题, NSTimer 释放时机的选择上,劳神费力!...
    GerryZhu阅读 1,915评论 0 4
  • 提到定时器,NStimer肯定是我们最为熟悉的。 但是NStimer有着很大的缺点,并不准确。 通俗点说,就是它该...
    mengyingguo阅读 385评论 0 0