美文网首页我爱编程
iOS NSTimer使用详解 . nstimer设置时间间隔不

iOS NSTimer使用详解 . nstimer设置时间间隔不

作者: 毛毛虫惊碎花容 | 来源:发表于2018-05-28 14:46 被阅读0次

iOS NSTimer 使用详解

1.scheduled开头和非schedule的开头方法的区别。系统框架提供了几种创建NSTimer的方法,其中以scheduled开头的方法会自动把timer加入当前run loop,到了设定的时间点就会触发指定的方法,而没有scheduled开头的方法则需要程序员自己手动添加到timer到一个run loop中才会有效。run loop在运行时一般有两个mode,一个defaultmode,一个trackingmode,正常情况下run loop使用defaultmode,scheduled生成的timer会默认添加到defaultmode中,当我们互动scrollview时,run loop切换到trackingmode运行,于是我们发现定时器失效了。为了使定时器在我们滑动scrollview时也能正常运行,我们需要确保defaultmode和trackingmode里都添加了我们生成的timer。如:


NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:_timeInterval target:self selector:@selector(addone) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];

或者:


NSTimer *timer = [NSTimer timerWithTimeInterval:_timeInterval target:self selector:@selector(addone) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

2.使用NSTimer时,timer会保持对target和userInfo参数的强引用。只有当调取了NSTimer的invalidate方法时,NSTimer才会释放target和userInfo。生成timer的方法中如果repeats参数为NO,则定时器触发后会自动调取invalidate方法。如果repeats参数为YES,则需要程序员手动调取invalidate方法才能释放timer对target和userIfo的强引用。

3.在使用repeats参数为YES的定时器时,如果在使用完定时器时后没有调取invalidate方法,导致target和userInfo没有被释放,则可能会形成循环引用情况,从而影响内存释放。

设置时间间隔不等,重置启动时间

    [NSTimer scheduledTimerWithTimeInterval:0 repeats:YES block:^(NSTimer * _Nonnull timer) {

        // do something
        [timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:10]];

    }];

相关文章

  • iOS NSTimer使用详解 . nstimer设置时间间隔不

    iOS NSTimer 使用详解 1.scheduled开头和非schedule的开头方法的区别。系统框架提供了几...

  • 无标题文章

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

  • iOS定时器

    一、NSTimer 如果当前runLoop过于繁忙,则会导致NSTimer不够准时,如果NSTimer设置的间隔时...

  • iOS NSTimer

    NSTimer是iOS上的一种计时器,通过NSTimer对象,可以指定时间间隔,向一个对象发送消息。NSTimer...

  • NSTimer注意点及循环引用

    NSTimer 作用:文档又讲:在固定的时间间隔被触发,给指定目标发送消息。 NSTimer使用必须注意点? 要想...

  • ios中循环引用问题

    ios中循环引用问题 NO1: NSTimer 问题:当你创建使用NSTimer的时候,NSTimer会默...

  • NSTimer 使用进阶

    NSTimer 是 iOS 上的一种计时器,通过 NSTimer 对象,可以指定时间间隔,向一个对象发送消息。NS...

  • NSTimer 基本使用和注意事项

    NSTimer的基本使用 NSTimer: 一个在确定时间间隔内执行一次或多次我们指定对象方法的对象。 基本使用:...

  • iOS NSTimer使用详解

    第一种示例: _myTimer = [NSTimer timerWithTimeInterval:5 target...

  • NSTimer

    深入NSTimer(iOS)iOS 中的 NSTimer关于NSRunLoop和NSTimer的深入理解

网友评论

    本文标题:iOS NSTimer使用详解 . nstimer设置时间间隔不

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