美文网首页
定时器的使用总结

定时器的使用总结

作者: 码蚁居然被用过了 | 来源:发表于2016-03-28 12:26 被阅读59次

一、NSTimer
使用方式如下:

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action) userInfo:nil repeats:NO];

优点:一行代码,简洁明了
坑坑坑坑坑:
1、只执行一次的timer在结束后计数器会减1,然后释放。重复执行的timer不会减1,如果不调用 [timer invalidate]会造成内存泄露,留下隐患;
2、执行时间不精确,会有误差。因为如果timer所在Runloop此时正在执行别的操作,那么就会出现延迟的情况,
3、当屏幕上存在tableview等类似的可滑动控件的时候,Timer有可能不会执行。因为在使用上述方式添加timer的时候,其RunloopMope是NSDefaultRunLoopMode,而当tableview滑动的时候,此时进入NSTrackingRunLoopMode,此时timer就不会执行,解决方法就是采用如下方式添加timer,并设置模式为NSRunLoopCommonModes,但是带来的负面影响就是timer的耗时操作可能会造成界面卡顿。

NSTimer *timer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

二、CADisplayLink

self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplayLink:)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

个人理解:处理经度比Timer高点外,其他优缺点都差不多,只不过能按照屏幕的刷新频率来执行。

三、GCD

dispatch_queue_t timerQueue = dispatch_queue_create("timerQueue", 0);
timerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, timerQueue);
double interval = 1 * NSEC_PER_SEC;
dispatch_source_set_timer(timerSource, dispatch_time(DISPATCH_TIME_NOW, 0), interval, 0);
// 设置定时任务
dispatch_source_set_event_handler(timerSource, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self action];
    });
});
// 唤起定时器
dispatch_resume(timerSource);

优点:不用考虑内存泄露,线程问题
缺点:步骤繁琐

相关文章

  • 实战中总结iOS定时器timer的注意点

    本文旨在总结项目中因使用各类定时器而踩到的坑,并附上经验总结。 NSTimer NSTimer是最常用的定时器,坑...

  • 定时器的使用总结

    一、NSTimer使用方式如下: 优点:一行代码,简洁明了坑坑坑坑坑:1、只执行一次的timer在结束后计数器会减...

  • 无标题文章

    iOS NSTimer使用详解-开启、关闭、移除 定时器定时器详解ios定时器关闭定时器NSTimer 1、要使用...

  • VUE中定时器如何使用?

    定时器的创建和使用 定时器的销毁 定时器 setTimeout()方法 和 setInterval() 使用方法相...

  • NSTimer使用注意的问题

    总结一下平时使用NSTimer碰到的几个小问题: 作为定时器使用时不准确的问题 ScrollView滚动时time...

  • AlarmManager 设置和取消定时器 实例

    使用 AlarmManager 设置定时器的方法如下: 使用 AlarmManager 取消定时器的方法如下: 下...

  • Quartz定时器

    Quartz定时器的学习总结_给的再多~不如懂我-CSDN博客_quartz定时器 Quartz定时器 官方文档翻...

  • NSTimer定时器类

    Runloop定时器的应用及关闭iOS NSTimer 定时器用法总结 1.定时器的创建 参数1:时间间隔(定时的...

  • 初识js下的定时器

    定时器 setTimeout、setInterval 定时器的使用方法 setTimeout(fn,1000) ...

  • Vue @hook

    使用之前我们在Vue使用定时器的时候,在创建定时器的时候,当页面不存在的时候需要销毁定时器。我们一般会这样使用 但...

网友评论

      本文标题:定时器的使用总结

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