NSTimer的释放问题

NAUYNUJUG 2018-03-06 03:37:08
app的功能要求能在页面里按钮打开后台的定时循环任务一直后台运行,然后继续其他操作,包括离开当前页面啊等等,到时需要停止的时候就再回到页面结束,我是用的NSTimer来实现循环任务,但是在网上了解的都是需要在离开页面时就释放NSTimer,否则会内存泄漏云云,请问这个该怎么解决,如何能实现后台循环任务还能离开当前页面,后面还能释放这个定时器?
...全文
1238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
铘少偌夢 2018-11-15
  • 打赏
  • 举报
回复
这个问题最主要的重点是释放的时机,比如当任务完成后就释放NSTimer,可以在NSTimer的循环方法中去判断任务完成的时机,当完成时就释放NSTimer。例如下面的代码,偏移时间和时间节点的比较: if (self.timeOffset >= self.duration) { [self.timer invalidate]; self.timer = nil; }
ShenYj_4 2018-10-09
  • 打赏
  • 举报
回复
楼上基本都补充到了 我在汇总一下: 1. 这个NSTimer在这种场景下,不适合放在页面里了, 应该放在一个生命周期更长的类中 2. 指望定制器实现后台是没戏了, 支持后台的功能很多,比如:音频、蓝牙、定位。。。,可以结合业务配合其中一种功能开启后台模式
weixin_41694952 2018-09-29
  • 打赏
  • 举报
回复
实现一个全局类,这个类不能做其他任何事情,只是持有这个NSTimer。 当你第一次进入这个页面的时候,初始化该全局类,自动创建NSTimer,并执行,此时NSTimer和全局类绑定,和页面没有关系 当你不需要NSTimer时,释放该全局类,并在全局类的dealloc方法里调用NSTimer 的 invalidate 函数,完成对NSTimer的释放 为什么能释放? 因为NSTimer的delgate是Strong类型的,之所以会引起内存泄漏,是因为当你在页面里强引用NSTimer时,NSTimer的delegate又强引用了页面,所以才会出现内存泄漏。
大飞哥666 2018-03-13
  • 打赏
  • 举报
回复
你需要解决2个问题: 1.是如何保证NSTimer不被释放。楼上的朋友已经帮你解决了,将NSTimer放到不会被销毁的类里边,比如AppDelegate。 2.你需要保证你的APP在后台能够一直运行。正常情况下,你进入后台,APP就会被挂起,所以你需要解决一下这个问题。可以参考我的博客,里边有一篇正好是介绍APP后台运行的文章。 希望能帮助到你。
不担心 2018-03-12
  • 打赏
  • 举报
回复
"app的功能要求,能在页面里,按钮打开后台的定时循环,任务一直后台运行" 应该是这个意思吧,整个看下来没有特别的地方啊,你可以把NSTimer放在类似AppDelegate的公共类里就和你的页面没关系了啊,在AppDelegate里定义一个NSTimer,在启动的时候初始化他,但不要运行,然后在你需要控制的页面,比如A中点击了按钮再启动NSTimer,这时候A你要关闭要干嘛都不影响timer,要关闭的话回到A页面关闭,没有问题

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧