为什么在@nonescaping闭包中不需要[weak self]?
为什么在@nonescaping闭包中不需要[weak self]?
这个问题已经有答案了:在Swift中我们是否总是应该在闭包内使用[unowned self]
根据https://stackoverflow.com/a/38144190/72437:
原因是立即应用的闭包{}()被视为@noescape。它不会保留捕获的self。
和https://oleb.net/blog/2016/10/optional-non-escaping-closures/:
然而,使用非逃逸闭包是不可能创建引用循环的 - 编译器可以保证在函数返回时闭包已经释放了所有捕获的对象。
然而,我仍然不理解为什么@nonescaping
闭包不保留self
,也不需要[weak self]
?有人能以更简单的方式解释这个概念吗?
admin 更改状态以发布 2023年5月22日