Swift - 捕获列表 self 澄清

标签 swift closures self unowned-references capture-list

看了apple的一些文章和开发者指南,我对closure中的Capture List还是很困惑。 “捕获”是什么意思,它在无主 self 和弱 self 方面是如何在幕后运作的?闭包如何在不拥有对象的情况下使用自己? 我认为它就像制作那个对象的副本,所以当它完成时它像值类型一样从堆栈传递,但我想我错了。 我希望这里有人可以让它更容易理解,或者将我链接到一篇回答这个特定问题的好文章。 感谢提前

最佳答案

我的理解,可能有点简化,它是关于所有权和持有一个对象,这意味着只要我们声明了一个对象的所有权,它就不能从内存中释放出来,即使是对象的另一部分代码将其设置为 nil 或类似的。

对于 weak,我们说可以销毁该对象,并且我们只会在它仍然存在时才使用它。

因此,当在闭包中将 self 声明为 weak 时,我们说如果 self 在执行闭包时仍然存在,我们会这样做所以通常情况下闭包会被默默地忽略而不会产生错误。

关于Swift - 捕获列表 self 澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129147/

相关文章:

swift - 如何使用 IN 条件访问 SQLite.swift 中的 FTS 表

ios - 如何使用 Alamofire.request() 将 XML soap 响应保存到文件?

emacs - 手动退出临时覆盖图

没有 'self'的Python调用方法

ios - 如何在应用程序打开或关闭的特定日期时间在后台快速运行任务

swift - 向按钮添加操作,该按钮通过快速扩展添加到文本字段

lua - 带有闭包的语言中的函数,根据外部定义的变量采取不同的操作

JavaScript 动态闭包作用域

ruby - 顶级方法中 `self` 的规则是什么?

Python 使用 'self' 调用 map()