Swift 3.0 解决Timer循环引用

Swift 3.0 解决Timer循环引用,第1张

概述今天封装一个无限轮播图,再次被Timer坑在了无限循环里。 在3.0中Timer的创建和使用是这样的 fileprivate var cycleTimer : Timer? cycleTimer = Timer(timeInterval: 3.0, target: self, selector: #selector(anyStrings), userInfo: nil, repeats: tru 今天封装一个无限轮播图,再次被Timer坑在了无限循环里。 在3.0中Timer的创建和使用是这样的
fileprivate var cycleTimer : Timer? cycleTimer = Timer(timeInterval: 3.0,target: self,selector: #selector(anyStrings),userInfo: nil,repeats: true)RunLoop.main.add(cycleTimer!,forMode: .commonModes)

通常我们会和OC一样在deinit{}函数中这样干

cycleTimer?.invalIDate()//移除 cycleTimer = nil

不要以为这样做就万事大吉。当你pop回到上个界面的时候,你会发现你Timer仍在计时,这不难发现,一般我们会打印计时数字。由此我们想到程序压根就没有走deinit{}函数,我们写好的两行代码也不会执行。

解决办法:

你可以在使用这个VIEw的控制器中,在视图进入后台前对Timer进行销毁 *** 作。(不符合低耦合)

优秀的办法:

//cycleTimer = Timer(timeInterval: 3.0,selector: #selector(scrollToNextPage),repeats: true)  weak var weakSelf = self  cycleTimer = Timer(timeInterval: 1,repeats: true,block: {(timer) in       weakSelf!.anyString()   })  RunLoop.main.add(cycleTimer!,forMode: .commonModes)

这样做过之后,你必须要在deinit{}函数中销毁计时器,否则你的程序会crash

cycleTimer?.invalIDate()//移除 cycleTimer = nil
总结

以上是内存溢出为你收集整理的Swift 3.0 解决Timer循环引用全部内容,希望文章能够帮你解决Swift 3.0 解决Timer循环引用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1070338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存