大家对iOS代码中的循环引用导致内存泄漏都很了解,本博试图进一步完善和补充这一主题,谈谈间接循环引用造成泄漏的问题。
直接内存泄漏直接内存泄漏是显而易见的,你不发现都难,举个例子:
class RootView:UIView{ var timeCounterView:TimeCounterView? func pauseOrGoOnTimer() {...} func resetTimer() {...} } class TimeCounterView:UIView{ var timerDidModifiedCallback:((TimerModfiyAction)->Void)? }
现在RootView里有一个initView()方法,用来初始化,里面需要设置timeCounterView的回调:
func initView(){ timeCounterView = CounterView.create(with: cu) if let timeCV = timeCounterView{ timeCV.timerDidModifiedCallback = {action in self.otherSetupInvoke() switch action{ case .puaseOrGoOn: // 当计时暂停或继续时,执行对应的操作 timeCV.pauseOrGoOnTimer() case .reset: // 当计时取消或完成时重置计时器 timeCV.resetTimer() } } } }
首先