gpt4 book ai didi

ios - 为什么 ClassA 不通过对 ClassB 的引用来保留对 Class 的引用,这是 Class C 的属性

转载 作者:行者123 更新时间:2023-12-01 16:12:21 26 4
gpt4 key购买 nike

即使 ClassA没有直接引用 ClassC .如果我们注入(inject)相同的引用 bClassA已进入 ClassC为什么ClassC如果将此引用保存到 b,则不会保留?为什么只有在我们在 ClassA 中创建引用时才会保留它?至ClassC直接地?

class ClassA {
var b: ClassB?

func someFunc() {
let b = ClassB()
self.b = b
let c = ClassC(b: b)
c.doSomething()
}
}


class ClassB {}

class ClassC {
private let b: ClassB
init(b: ClassB) {
self.b = b
}

func doSomething() {
print("doSomething")
}

deinit {
print("C deinit")
}
}

let a = ClassA()
a.someFunc()

最佳答案

您似乎认为属性 bClassC持有对 ClassC 实例的强引用包含它,但事实并非如此。属性不会隐式地持有对包含它们的事物的强引用。因此本地ClassCsomeFunc 中创建的变量只活到 someFunc 结束因为没有任何东西对它有强烈的引用。

关于ios - 为什么 ClassA 不通过对 ClassB 的引用来保留对 Class 的引用,这是 Class C 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61682848/

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