【发布时间】:2020-03-05 09:23:25
【问题描述】:
我刚刚在我正在开发的应用程序中寻找内存泄漏,并注意到以下内容会产生内存泄漏:
class SubClass {
var didCloseHandler: (() -> Void)?
}
class MainClass {
var subClass = SubClass()
func setup {
subClass.didCloseHandler = self.didCloseSubClass
}
func didCloseSubClass() {
//
}
}
这会产生一个保留循环,并且有充分的理由 - didCloseHandler 强烈捕获 MainClass,而 MainClass 强烈捕获 SubClass。
我的问题:在 Swift 中有没有一种方法可以让我在没有保留循环的情况下将类方法分配给处理程序?
是的,我知道我可以使用subClass.didCloseHandler = { [weak self] self?.didCloseSubClass() } 做到这一点。不过,我想知道是否可以在不引入新闭包的情况下完成。
【问题讨论】:
-
嗨!你试过weak var subClass...吗?
-
让它
weak var subClass = SubClass() -
你为什么不想引入一个新的闭包?
-
@Sweeper 主要原因是为了让代码更简单,更易于维护。我给出的示例非常简单,但是假设我的处理程序有 3 个参数 - 在这种情况下,我必须在闭包中传递 3 个参数,如果我重构处理程序,我必须确保我的参数在任何地方都被适当地重命名,等等。
标签: swift memory-leaks retain-cycle