swift 提供给转义闭包的函数是否创建了对函数所有者示例的强引用

t40tm48m  于 2022-12-10  发布在  Swift
关注(0)|答案(1)|浏览(99)

在我目前正在做的项目中,我有大量的内存泄漏。VC从来没有从内存中消失过,不幸的是,现在这导致了很多很多问题。我能想到的唯一的罪魁祸首是我以可读性和简单性的名义使用闭包的方式,因为这些闭包都没有在内部强烈地捕获自我。我使用的方式如下:
functionWithEscapingClosure(closure: functionGivenToTheClosure(_:))
如果这创建了一个强引用,我有太多的重构要做,如果不是,我将在其他地方寻找。提前感谢!
我已经在网上寻找对该主题的解释,搜索了Swift文档,但没有找到任何信息。

vawmfj5a

vawmfj5a1#

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

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

因此,是的,它将隐式捕获对拥有传入函数的示例的强引用。
您需要显式执行弱捕获来打破循环:

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

相关问题