美文网首页
记录NSTimer的小坑

记录NSTimer的小坑

作者: 小驴拉磨 | 来源:发表于2018-10-12 15:09 被阅读20次

了解过定时器NSTimer的都知道在不是用的时候都必须invalidate,避免造成内存泄漏。
新到公司接手一个项目,之前公司找外包做的,问题太多接手回来找自己人做。外包做的项目大概大家都了解功能实现,性能靠边站。
在优化优化一个播放页面时,遇到一个问题就是,这个页面的怎么整都不会释放,检查代码发现是定时器的锅:

//创建定时器
- (void)startDurationTimer{
    self.durationTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(monitorVideoPlayback) userInfo:nil repeats:YES];
     [[NSRunLoop currentRunLoop] addTimer:self.durationTimer forMode:NSDefaultRunLoopMode];
}

//释放定时器
- (void)stopDurationTimer{
    [self.durationTimer invalidate];
}

发现问题是,stopDurationTimer方法已经调用,但是定时器的monitorVideoPlayback方法还在一直顶用,很明显定时器还没有被释放。
查资料才知道:
停止timer的运行,但这个是永久的停止:(注意:停止后,一定要将durationTimer赋空,否则还是没有释放。不信?你自己试试,我是试了···)把释放的代码改为:

- (void)stopDurationTimer{
    [self.durationTimer invalidate];
    self.durationTimer = nil;
}

要想实现:先停止,然后再某种情况下再次开启运行timer,可以使用下面的方法:
首先关闭定时器不能使用上面的方法,应该使用下面的方法:

//关闭定时器
[myTimer setFireDate:[NSDate distantFuture]];

然后就可以使用下面的方法再此开启这个timer了:

//开启定时器
[myTimer setFireDate:[NSDate distantPast]];

例子:比如,在页面消失的时候关闭定时器,然后等页面再次打开的时候,又开启定时器。
(主要是为了防止它在后台运行,占用CPU)可以使用下面的代码实现:

//页面将要进入前台,开启定时器
-(void)viewWillAppear:(BOOL)animated
{
    //开启定时器
    [scrollView.myTimer setFireDate:[NSDate distantPast]];
}
 
//页面消失,进入后台不显示该页面,关闭定时器
-(void)viewDidDisappear:(BOOL)animated
{
    //关闭定时器
    [scrollView.myTimer setFireDate:[NSDate distantFuture]];

参考文章:https://blog.csdn.net/enuola/article/details/8099461

相关文章

  • 记录NSTimer的小坑

    了解过定时器NSTimer的都知道在不是用的时候都必须invalidate,避免造成内存泄漏。新到公司接手一个项目...

  • 定时器(转载)

    定时器方面碰到了一些坑,特做下记录。 一,NSTimer //创建方式1 NSTimer*timer=[NSTim...

  • NSTimer的使用

    NSTimer 的使用 为什么会写NSTimer呢? 原因很简单, 这里有坑! NSTimer 使用的顺序 创建N...

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

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

  • NSTimer的坑

    这有三个API都是新增的,标识有API_AVAILABLE(macosx(10.12), ios(10.0), w...

  • NSTimer的坑

    之前要做一个发送短信验证码的倒计时功能,打算用NSTimer来实现,做的过程中发现坑还是有不少的。 基本使用 NS...

  • iOS之NSTimer坑点总结

    前言 我负责努力,其余交给运气。 对于NSTimer,大家应该很熟悉,因为NSTimer的坑比较多,所以面试中也是...

  • NSTimer遇到的坑

    使用 下面两个定时器的使用是等价的 当使用NSTimer的scheduledTimerWithTimeInterv...

  • 踩坑NSTimer

    0.目录 概论,非主线程定时器导致的问题,定时器在界面滑动时候失效,定时器的准确性,定时器中的强引用。 1.概论 ...

  • 关于NSTimer的循环引用问题

    关于NSTimer的介绍 1、最近在总结知识、好久没记录了,今天抽空记录下NSTimer的使用,首先我们先看下Ap...

网友评论

      本文标题:记录NSTimer的小坑

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