我目前正在进行的项目中存在大量内存泄漏。VC永远不会从记忆中消失,不幸的是,这现在造成了很多问题。我能想到的唯一问题是我以可读性和简单性的名义使用闭包的方式,因为这些闭包都没有在内部捕获self强。我使用的方法如下:
functionWithEscapingClosure(closure: functionGivenToTheClosure(_:))
如果这创建了一个强引用,我有很多重构要做,如果没有,我将寻找其他地方。提前感谢!
我已经在网上寻找了这个主题的解释,搜索了Swift文档,但找不到任何信息。
你的代码片段基本上相当于:
functionWithEscapingClosure(closure: { parameter in
self.functionGivenToTheClosure(parameter)
})
所以,它会隐式地捕获对拥有传入函数的实例的强引用。
你需要显式地执行弱捕获来打破这个循环:
functionWithEscapingClosure(closure: { [weak self] parameter in
self?.functionGivenToTheClosure(parameter)
})