美文网首页
iOS内存泄漏易错点

iOS内存泄漏易错点

作者: 霸哥终结者 | 来源:发表于2021-12-10 17:15 被阅读0次

问题

记录一个内存泄漏的案例,闭包引用自己或者多个对象,导致对象无法正常销毁,从而导致内存泄漏。

let view = UIView()
view.callback = { [weak self] in
    guard let self = self else { return }
    self.backgroundColor = view.backgroundColor
}

上面例子的闭包中,不仅引用了self, 还有view,虽然self是弱引用可以正常销毁,但是由于view自己引用了自己,无法正常销毁。所以这种情况得特别注意。

解决方案

那么这种情况怎么处理呢?

  1. 其实可以采闭包里面定义多个弱引用(推荐)
let view = UIView()
view.callback = { [weak self, weak view] in
    guard let self = self, let view = view else { return }
    self.backgroundColor = view.backgroundColor
}
  1. 外部进行弱引用(不推荐)
let view = UIView()
weak var weakView = view
view.callback = { [weak self] in
    guard let self = self, let weakView = weakView else { return }
    self.backgroundColor = weakView.backgroundColor
}

最后推荐一种弱引用的写法(仅个人见解,若有更好的意见或建议,欢迎指出)

guard let self = self else { return } // 推荐,代码侵入性最小
guard let weakSelf = self else { return } // 不推荐,虽然易理解,但代码侵入性较大

相关文章

网友评论

      本文标题:iOS内存泄漏易错点

      本文链接:https://www.haomeiwen.com/subject/sxocfrtx.html