GCD计时器的相关操作

集团项目需要在网络请求的时候添加一个计时器,NSTimer有什么缺点我就不说了,今天说下GCD做计时器的一些心得。
创建计时器

@property (nonatomic, strong) dispatch_source_t timer;//创建一个全局的timer

self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
    dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);//开始时间:从现在开始1秒后开始
    dispatch_source_set_timer(self.timer, start, (int64_t)(1.0 * NSEC_PER_SEC), 0);
    
    dispatch_source_set_event_handler(self.timer, ^{
//        计时器计时中需要执行的方法
        [self timerMethod1];
    });

//开启计时器
dispatch_resume(self.timer);
//关闭计时器
dispatch_cancel(self.timer);

使用这个方法关闭计时器,timer会置nil,如果循环使用计时器,再次执行开启计时器的方法,就会出现闪退情况,可以使用下面的方法暂停计时器

dispatch_suspend(self.timer);

这样下次启动计时器就可以正常使用了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,970评论 8 265
  • 一. NSTimer NSTimer的初始化方法有以下几种: 会自动启动, 并加入* MainRunloop*的*...
    codeshow阅读 3,547评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,878评论 1 32
  • iOS中计时器常用的有两种方式 使用NSTimer类(Swift 中更名为 Timer) NSTimer 常用的初...
    superDg阅读 5,837评论 0 1
  • 吹了许久的风停了 下了许久的雨遁了 时间也止此定格 水中鱼儿的表情 怎耐似无人释注 七秒中的记忆 循绵七十七个七秒...
    湫予兮阅读 1,891评论 0 0

友情链接更多精彩内容