给转义闭包的函数创建对函数所有者实例的强引用



我目前正在进行的项目中存在大量内存泄漏。VC永远不会从记忆中消失,不幸的是,这现在造成了很多问题。我能想到的唯一问题是我以可读性和简单性的名义使用闭包的方式,因为这些闭包都没有在内部捕获self强。我使用的方法如下:

functionWithEscapingClosure(closure: functionGivenToTheClosure(_:))

如果这创建了一个强引用,我有很多重构要做,如果没有,我将寻找其他地方。提前感谢!

我已经在网上寻找了这个主题的解释,搜索了Swift文档,但找不到任何信息。

你的代码片段基本上相当于:

functionWithEscapingClosure(closure: { parameter in
self.functionGivenToTheClosure(parameter)
})

所以,它会隐式地捕获对拥有传入函数的实例的强引用。

你需要显式地执行弱捕获来打破这个循环:

functionWithEscapingClosure(closure: { [weak self] parameter in
self?.functionGivenToTheClosure(parameter)
})

最新更新