大佬教程收集整理的这篇文章主要介绍了swift – 存储弱引用有时会导致泄漏,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑1:https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151207/001197.html
提到这是here的改进:
class ViewControllerBase: UIViewController { let timer:DispatchSourceTimer = DispatchSource.makeTimerSource(flags: [],queue: DispatchQueue(label: "q.q")) deinit { NSLog("deinit of \(NSStringFromClass(type(of: self)))") } override func viewDidLoad() { super.viewDidLoad() timer.scheduleRepeating(deadline: .Now(),interval: .seconds(1)) timer.setEventHandler { UIView.animate(withDuration: 0.2) { [weak self] in self?.view.backgroundColor = UIColor.green } } }
这会以微妙的方式泄漏内存……即使self仅以“弱”方式使用,也存在保留循环.这是因为嵌套闭包捕获了一个强引用,以便在后面的闭包中使用.
编辑2:
我可能是错的,但是OP正在使用changes.forEach闭包,然后是另一个带有changes.added.forEach的闭包我可能是错的,但这可能是整个问题的原因,也许是在那里声明它[弱自我](集群,变化) in …可能会删除这个问题.它是内置的swift,但仍然是一个闭合,从技术上讲它可以嵌套.
尝试将代码更改为:
changes.forEach{[weak self] (cluster,change) in
看看是否有帮助
要么
changes.forEach{[uNowned self] (cluster,change) in
以上是大佬教程为你收集整理的swift – 存储弱引用有时会导致泄漏全部内容,希望文章能够帮你解决swift – 存储弱引用有时会导致泄漏所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。