gpt4 book ai didi

ios - Swift - 具有自引用的变量函数

转载 作者:可可西里 更新时间:2023-11-01 00:21:30 26 4
gpt4 key购买 nike

我创建了一个结构来保存我的 UITableViewCell 的数据,如下所示:

struct CellData {
var title: String
var action: () -> Void
init(title: String, action: () -> Void) {
self.title = title
self.action = action
}
}

在我的 TableViewController 中,我是这样设置的:

lazy var buttonCells: [CellData] = [
CellData(
title: "Button 1",
action: {
**self.doSomething()**
}
),
CellData(
title: "Button 2",
action: {
**self.doSomethingElse()**
}
)
]

但是,在操作中使用 self 会导致 TableViewController 在 Controller 被关闭时( deinit 函数未被调用)。当我删除 self 引用并将其替换为其他内容时,TableViewControllerdeinitialized 就好了。我怎样才能解决这个废弃的内存问题?

最佳答案

更改您的操作定义以使用捕获组:

action: {
[weak self] in

guard let strongSelf = self else {
return
}
strongSelf.doSomething()
}

[weak self] 捕获组声明所做的是将 self 转换为 block 内的弱变量。如果拥有对象在 block 等待调用时被释放,它会被传递给 nil。

然后,一旦进入 block 内部,guard 语句就会尝试将弱 self 定义映射到强局部变量。如果 self 为零,则退出。如果不是,strongSelf 包含一个未包装的对 self 的强引用,您将照常进行。

关于ios - Swift - 具有自引用的变量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40852572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com