iOS 每隔一段时间执行一次代码

//每隔一分钟执行一次打印
// GCD定时器
static dispatch_source_t _timer;
//设置时间间隔
NSTimeInterval period = 60.f;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

// 第一次不会立刻执行,会等到间隔时间后再执行
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, period * NSEC_PER_SEC);
dispatch_source_set_timer(_timer, start, period * NSEC_PER_SEC, 0);

// 第一次会立刻执行,然后再间隔执行
dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), period * NSEC_PER_SEC, 0);
// 事件回调
dispatch_source_set_event_handler(_timer, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"Count");
        //网络请求 doSomeThing...
    });
});
    
// 开启定时器
if (_timer) {
    dispatch_resume(_timer);
}
    
// 关闭定时器
if (_timer) {
    dispatch_source_cancel(_timer);
    _timer = nil;
}
  • 第一次不会立刻执行,等到间隔时间后再循环执行
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, period * NSEC_PER_SEC);
dispatch_source_set_timer(_timer, start, period * NSEC_PER_SEC, 0);
  • 第一次会立刻执行,然后再间隔执行
dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), period * NSEC_PER_SEC, 0);
  • 延迟10s执行一次
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 10.0 * NSEC_PER_SEC);
dispatch_after(time, dispatch_get_main_queue(), ^{
    NSLog(@"1111111111");
});

附:我的博客地址

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

相关阅读更多精彩内容

  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 13,895评论 12 197
  • 今天因为要等同事所以下班晚了些,我俩走出公司便去寻车子。我老远看见马路对面摆着一排摩拜便高兴的走过去,同事因为没有...
    三只樱桃阅读 3,165评论 0 0
  • 带着寒凉的体温, 借着细雨夹带着雪粒子, 不再彷徨, 坚强而笃定的我为爱而来! 我的泪已结成了霜, 片片雪花是我为...
    山居飞鸿阅读 4,046评论 6 11
  • 题目: 代码:
    thousand_阅读 2,166评论 0 0
  • 儿子把垃圾桶里奶奶扔掉的笋壳一个一个捡出来,结果地上很乱,奶奶把笋壳全部倒掉,儿子大哭。我先共情:“奶奶把你喜欢的...
    蜂蜜87阅读 2,454评论 0 0

友情链接更多精彩内容