社区
iOS
帖子详情
NSTimer的释放问题
NAUYNUJUG
2018-03-06 03:37:08
app的功能要求能在页面里按钮打开后台的定时循环任务一直后台运行,然后继续其他操作,包括离开当前页面啊等等,到时需要停止的时候就再回到页面结束,我是用的NSTimer来实现循环任务,但是在网上了解的都是需要在离开页面时就释放NSTimer,否则会内存泄漏云云,请问这个该怎么解决,如何能实现后台循环任务还能离开当前页面,后面还能释放这个定时器?
...全文
1238
5
打赏
收藏
NSTimer的释放问题
app的功能要求能在页面里按钮打开后台的定时循环任务一直后台运行,然后继续其他操作,包括离开当前页面啊等等,到时需要停止的时候就再回到页面结束,我是用的NSTimer来实现循环任务,但是在网上了解的都是需要在离开页面时就释放NSTimer,否则会内存泄漏云云,请问这个该怎么解决,如何能实现后台循环任务还能离开当前页面,后面还能释放这个定时器?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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页面关闭,没有问题
iOS
NS
Timer
循环引用的几种解决办法
发生场景 在 Controller B 中有一个
NS
Timer
@property (strong, nonatomic)
NS
Timer
*
timer
; 你创建了它,并挂载到 main runloop self.
timer
= [
NS
Timer
...Controller B 将不会
释放
,B 与
timer
循环
RJWeakTime:RJWeak
Timer
是一个可以自动
释放
的
NS
Timer
,因此您不必担心
NS
Timer
内存泄漏
RJWeak
Timer
是可以自动
释放
的
NS
Timer
,因此您不必担心
NS
Timer
内存泄漏。 Design I
ns
tall pod 'RJWeakTime' Usage self.
timer
= [RJWeakTime scheduled
Timer
WithTimeInterval:1.0 target:self selector:@selector(cb:...
RDRIntermediateTarget:防止由
NS
Timer
,
NS
Thread或CADisplayLink实例引起的保留周期的替代方法
如果目标也保留这些类之一的实例,则我们有一个保留周期:目标和实例都不会被
释放
。 您为什么要保留这些类之一的实例? 假设您有某种需要使用CADisplayLink实例的视图动画。 动画完成后,就不再需要CADisplayLink...
ZHWWeak
Timer
-master.zip
解决iOS中使用
NS
Timer
定时器,无法调用dealloc方法,导致引用对象无法
释放
,造成循环引用的
问题
。
IOS 常见的循环引用总结
举个例子:A->B->C->….->X->B ->表示强引用,这样的B的引用计数就是2,假如A被系统
释放
了,理论上A会自动减小A所引用的资源,就是B,那么这时候B的引用计数就变成了1,所有B无法被
释放
,然而A已经被
释放
了,所有B...
iOS
29,028
社区成员
12,466
社区内容
发帖
与我相关
我的任务
iOS
主要讨论与iOS相关的软件和技术
复制链接
扫一扫
分享
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章