在阅读了一些苹果的文章和开发者指南之后,我仍然对闭包中的捕获列表感到困惑。
它是什么意思“俘虏”,它是如何在幕后工作的,就无主的自我和软弱的自我而言?闭包如何在不拥有对象的情况下使用self?
我认为这就像复制了一个对象,所以当它完成时,它是从类似堆栈的值类型中传递的,但我猜我错了。
我希望这里的人能让我更容易理解,或者把我和一篇回答这个问题的好文章联系起来。
谢谢你的预付款
最佳答案
我的理解可能有点简单,就是它是关于一个对象的所有权和持有权,这意味着只要我们声明一个对象的所有权,它就不能从内存中释放出来,即使代码的另一部分将其设置为nil或类似的值。
对于weak
我们说可以销毁这个对象,并且只有当它还在的时候我们才会使用它。
因此,当在闭包中声明self
为weak
时,我们说如果self
仍在执行闭包时,我们通常这样做,否则闭包将被忽略而不会产生错误。
关于swift - Swift-捕获列表自我澄清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50129147/