swift – 存储弱引用有时会导致泄漏
发布时间:2020-12-14 05:30:48 所属栏目:百科 来源:网络整理
导读:我有一个类A,它将一个可选的弱变量存储到其他对象,这是A的子类.有时当我在这个变量中存储一些东西时,我得到一个泄漏 – 这种情况很少发生,但确实如此.我在forEach循环中分配这个变量,但是在使用弱变量时我也在其他应用程序地点发现了类似的泄漏,所以我不认为
我有一个类A,它将一个可选的弱变量存储到其他对象,这是A的子类.有时当我在这个变量中存储一些东西时,我得到一个泄漏 – 这种情况很少发生,但确实如此.我在forEach循环中分配这个变量,但是在使用弱变量时我也在其他应用程序地点发现了类似的泄漏,所以我不认为循环与此有任何关系.负责任的库是lib
swiftCore.dylib,负责的框架是swift :: RefCounts< swift :: RefCountBitsT<(swift :: RefCountInlinedness)1> > :: formWeakReference().其他人有类似的问题吗?有什么办法可以解决这个问题吗?
尝试设置变量而不是弱,将其设置为无主.
这是一个Swift错误,因为没有警告开发人员他正在捕获嵌套闭包的强引用,但是,将其设置为unowned应该作为现在的解决方法. 编辑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: 尝试将代码更改为: changes.forEach{[weak self] (cluster,change) in 看看是否有帮助 要么 changes.forEach{[unowned self] (cluster,change) in 您也可以粘贴代码而不是屏幕截图,因为它更容易重新创建代码而不是重新输入代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |