NSTimer 导致UIViewController无法正常释放

假如有一个需求,要求B页面每隔5秒请求一次数据,所以用了NSTimer

代码如下

 self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateMonitorTime) userInfo:nil repeats:YES];
 [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];

- (void)updateMonitorTime
{
    NSLog("请求数据");
}

当回到A页面的时候发现还在B页面继续调用接口。

原因:当我们使用NSTimer的方法时,定时器对象会对它的target(即self:当前控制器)持有强引用,如果定时器不销毁,则控制器无法释放。

解决办法:

- (void)viewWillDisappear:(BOOL)animated
{
    if (self.timer != nil) {
         [self.timer invalidate];
         self.timer = nil;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mukekeheart的iOS之旅

iOS学习——浅谈RunLoop

  RunLoop的字面意思是运行循环、跑圈,一个App启动后能一直执行,就是因为启动后进入了一个循环,在这个循环中不断监听各种状态、手势动作,并做出相应的响应...

1021
来自专栏娱乐心理测试

多线程与NSTimer

1625
来自专栏DeveWork

5 款前沿的WordPress主题后台选项开发框架推荐

在开发WordPress 主题的时候,借用成熟的WordPress 主题后台选项开发框架可以为我们省下不少功夫。相信你接触过不少国人做的所谓“原创”主题,一看后...

28010
来自专栏腾讯开源的专栏

Tencent Joins the GPL Cooperation Commitment

? Hong Kong, 07 November, 2018 – Tencent, a leading provider of Internet servic...

1392
来自专栏一“技”之长

iOS中RunLoop机制浅探 原

        RunLoop这个家伙在iOS开发中,我们一直在用,却从未注意过他,甚至都不从见过他的面孔,那个这个神秘的家伙究竟是做什么的?首先,我们先来观察...

873
来自专栏小二的折腾日记

Sublime Text3使用总结

保存为Sublime Text3\Packages\User\addCurrentTime.py

782
来自专栏MelonTeam专栏

一个创建自定义事件源的例子

上一篇文章我们介绍了RunLoop的相关知识,但是毕竟我们实际开发中很少应用,今天我们就通过介绍RunLoop在iOS系统中的应用,来实现一个小小的demo,启...

40810
来自专栏ios 技术积累

iOS NSTimer 什么时候需要使用NSRunLoopCommonModes

当使用NSTimer的scheduledTimerWithTimeInterval方法时。此时Timer会被加入到当前线程的Run Loop中,且模式是默认的N...

1862
来自专栏xx_Cc的学习总结专栏

iOS-RunLoop充满灵性的死循环

4428
来自专栏ios 技术积累

iOS RunLoop

RunLoop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运...

1232

扫码关注云+社区

领取腾讯云代金券