You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中静态函数传递闭包是否会引发内存泄漏?

闭包传递给静态函数是否会引发内存泄漏?

你的代码会引发内存泄漏,问题根源不是静态函数,而是闭包形成的强引用循环,具体分析如下:

引用链分析

  • MyClass的实例通过section属性强持有Section实例
  • Section实例强持有传入的didSelectHandler闭包
  • didSelectHandler是MyClass的实例方法,闭包会隐式强捕获MyClass的self(调用实例方法必须依赖实例本身)
  • 最终形成MyClass → Section → 闭包 → MyClass的强引用循环,导致两个对象都无法被ARC自动回收

修复方案

打破循环的核心是让闭包弱引用MyClass实例,修改createSections方法的闭包传递逻辑即可:

func createSections() {
    section = SectionBuilder.make(didSelectHandler: { [weak self] in
        self?.didSelectHandler()
    })    
}

这样闭包不再强持有MyClass实例,当MyClass被释放时,循环引用就会被打破。

补充说明

SectionBuilder的静态函数只是负责中转闭包并创建Section实例,它本身不会持有任何对象引用,所以静态函数并不是内存泄漏的诱因。内存泄漏的本质是闭包的强引用捕获逻辑,和函数是否静态无关。

内容的提问来源于stack exchange,提问作者Burak Akyalçın

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:17:34