gpt4 book ai didi

两个 Controller 之间的 iOS 对象或委托(delegate)?

转载 作者:搜寻专家 更新时间:2023-11-01 05:56:52 28 4
gpt4 key购买 nike

晚上,我的问题全是理论。

我从 Apple 开发人员文档 中了解到,最好使用委托(delegate)模式 来跟踪某些对象属性。这样我们就可以在不访问对象的情况下访问委托(delegate)。 (我真的没有得到这个选择的原因)

我也明白最好定义:protocolDelegate: class当我们在类中声明委托(delegate)时,最好使用 weak 词来防止某种“问题循环”。 (??)

所以,当我在玩代码时,我发现你不能在两个 view controllers 之间传递一个 weak delegate,因为当然,当您更改 Controller 时,weak delegate 将被删除,因为它是一个weak 东西(或者至少这是我的理解)。

所以,我必须在两个选项之间做出选择:

  • 使委托(delegate)“强”删除 weak 键。

  • 或者在 segue 中传递对象并将委托(delegate)保持为 weak

我有很多困惑,你能帮我理清思路吗? :D

最佳答案

您所指的循环称为保留循环

让我们用一个具体的例子来说明这一点:假设你有一个 UIViewController,它有一个 UITableView。 View Controller 对 TableView 有很强的引用。 View Controller 现在想充当 TableView 的委托(delegate)。

现在,如果 TableView 对其委托(delegate)有一个引用,我们会遇到以下情况: View Controller 对 TableView 有一个强引用,而 TableView 又是会对 View Controller 有很强的引用。因此两者都不能被释放。

要打破这个循环,对委托(delegate)的引用通常。这允许 View Controller 的保留计数最终下降到 0,这又可以释放 TableView 。

您想要使用委托(delegate)的类也应遵循此模式并使用 对其委托(delegate)的引用。因此,您应该通过您的 segue 传递所需的引用。

关于两个 Controller 之间的 iOS 对象或委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39124488/

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