swift - 在 Swift 中对闭包的困惑强烈地捕获了其中使用的变量
问题描述
我有这个代码片段:
class Animal {
var stamina = 0
func increaseStamina() {
stamina += 1
}
deinit {
print("gone")
}
}
var animal : Animal? = Animal()
let closure = {
animal?.increaseStamina();
print("closure end")
}
animal = nil //"gone"
closure()
在调用闭包之前将 animal 设置为 nil 后,它会立即打印“gone”。但我的理解是闭包也强烈地捕获了动物实例,所以实例应该在闭包执行之后被释放,而不是之前。我在这里的理解有什么问题?
解决方案
这是因为animal
在调用闭包时捕获,而不是在声明时捕获。由于您在将 nil 设置为后调用闭包animal
,因此捕获的属性为 nil。
推荐阅读
- c# - 从 global.asax 重定向到视图不起作用
- sql - 在配置单元中处理带双引号的字符串
- firebase - 在颤动中从firebase获取日期并将其存储在var中
- centos7 - 我在 CentOS 7 中的 Laravel 应用程序链接显示 ip 地址而不是域名
- javascript - 关闭按钮不删除类
- javascript - 隐藏选中元素Vue
- sql - 如何返回另一个 plpgsql 函数的内容?
- c# - 使用 JSON 填充 DataGridView 的属性
- php - 错误的控制器被用于编辑路由(使用 Laravel 资源助手)
- javascript - 在父级具有聚合值的树结构