看了apple的一些文章和开发者指南,我对closure中的Capture List还是很困惑。 “捕获”是什么意思,它在无主 self 和弱 self 方面是如何在幕后运作的?闭包如何在不拥有对象的情况下使用自己? 我认为它就像制作那个对象的副本,所以当它完成时它像值类型一样从堆栈传递,但我想我错了。 我希望这里有人可以让它更容易理解,或者将我链接到一篇回答这个特定问题的好文章。 感谢提前
最佳答案
我的理解,可能有点简化,它是关于所有权和持有一个对象,这意味着只要我们声明了一个对象的所有权,它就不能从内存中释放出来,即使是对象的另一部分代码将其设置为 nil 或类似的。
对于 weak
,我们说可以销毁该对象,并且我们只会在它仍然存在时才使用它。
因此,当在闭包中将 self
声明为 weak
时,我们说如果 self
在执行闭包时仍然存在,我们会这样做所以通常情况下闭包会被默默地忽略而不会产生错误。
关于Swift - 捕获列表 self 澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129147/