美文网首页
iOS定时器的深度用法

iOS定时器的深度用法

作者: 福尔摩罗 | 来源:发表于2018-08-01 13:28 被阅读0次

问题:
/**
1.你知道NSTimer会retain你添加调用方法的对象吗?
2.你知道NSTimer并不是每次都准确按你设定的时间间隔来触发吗?
3.NSTimer需要和NSRunloop结合起来使用,你知道是怎么结合起来使用的吗?
4.你知道吗?除了用NSTimer实现定时器,还有别的方法能实现定时器吗?
*/
1.定时器的常用方式
2.fire方法的正确理解
3.定时器一定会在规定时间间隔内实时触发事件吗,.NSRunloopMode对定时器的影响
4.定时器引起的循环引用
5、GCD定时器

解答:
1.NSTimer通常有俩种使用方式,一种为timeWithTimeIntervel 另一种为schlduledTimerWithTimeInterval

2.fire方法的实际用处是 实时触发定时器,调用定时器方法

3.当定时器的runloopMode为默认的mode时,在主线程刷新UI时,mode会切换为traking,定时器会停掉,解决方法为指定runloopMode的模式为Common,Common模式包含了前俩种模式,并且在使用timeWithTimeIntervel方法时,必须后面使用addTimerForMode 方法添加到当前的runloop当中,schlduledTimerWithTimeInterval 方法会自动添加到当前runloop当中

4.如果定时器在主线程中创建,则需要在主线程中取消,如果在子线程中创建,则需要在子线程中取消(子线程执行方法:[NSThread detachNewThreadSelect:() to ...])
使用NSTimer 定时器会对当前tagart有一个强引用,runloop对timer有强引用, runloop-->timer-->self,,self-->tiomer造成循环引用,停止循环引用的方法为在页面销毁前timer 调用 invalidate 方法,把他从runloop中干掉,或者使用block(iOS10之后官方给出了带block的定时器可以避免循环引用)

5.GCD定时器的使用

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t  timer =dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
    dispatch_source_set_timer(timer,dispatch_time(DISPATCH_TIME_NOW, 0),1.0*NSEC_PER_SEC, 0); 
    dispatch_source_set_event_handler(timer, ^{

            dispatch_async(dispatch_get_main_queue(), ^{
                handler();
            });
    });
    dispatch_resume(timer);

其中的timer 为局部变量,在执行玩一次后会被释放,所以要想办法对他有一个强引用,不要让他提前释放,网上大多的方法为把他变成全局变量,延长他的生命周期,如果有别的方法能够使其强引用 也是可以的。

相关文章

  • iOS定时器的深度用法

    问题:/**1.你知道NSTimer会retain你添加调用方法的对象吗?2.你知道NSTimer并不是每次都准确...

  • NSTimer定时器类

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

  • NSTimer用法

    IOS NSTimer 定时器用法总结 - 珲少 的个人空间 - 开源中国社区

  • 定时器的深度用法

    简述:一个在确定时间间隔内执行一次或者多次我们指定对象方法的对象。如果是多次执行对象方法,那么它怎么保证执行的时候...

  • 定时器弹框、定时器基本用法、定时器动画、时钟

    定时器弹框: 定时器基本用法: 定时器动画: 时钟:

  • iOS定时器的用法

    iOS开发中经常需要按照某个周期执行一个方法,这时就需要用到定时器。而实现方法大概有3种:NSTimer、CADi...

  • 无标题文章

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

  • 防止内存泄露的NSTimer定时器

    目录 NSTimer的基础用法 NSTimer的内存泄露 安全防侧漏的定时器 NSTimer的基础用法 创建定时器...

  • 定时器

    定时器弹窗 定时器基本用法 定时器动画 时钟 倒计时 变量的作用域

  • js定时器

    定时器弹窗 定时器的基本用法 定时器动画 时钟 倒计时 变量的作用域

网友评论

      本文标题:iOS定时器的深度用法

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