gpt4 book ai didi

ios - 相对内存引用问题

转载 作者:行者123 更新时间:2023-11-28 23:20:14 24 4
gpt4 key购买 nike

在下面的代码中,我有一个人,这个人有一个地址(现在只有城市)。

class Address {
var city : String
init(city : String) {
self.city = city
}

deinit {
print(self.city, "deinit")
}
}


class Person {
var name : String
var age : Int
var address : Address?

init(name: String, age: Int, address : Address?) {
self.name = name
self.age = age
self.address = address
}

class func createPerson( name : String, age : Int, address : Address? ) -> Person {
let p = Person(name: name, age: age, address: address)
return p
}

deinit {
self.address = nil
print(self.name, " Deinit")
}

}

问题案例 1:

如果我创建这样的对象并且我nil person 然后london 不会得到nil。

let london : Address? = Address(city: "London")
var jack : Person? = Person.createPerson(name: "Jack", age: 34, address: london)

jack = nil // jack de-init, london not de-init
// now london is the memory leak

问题案例 2:

如果我声明 london 为 weak 则 london deinit 但如果 london 引用其他人那么它的地址也为零

weak var london : Address? = Address(city: "London")
var jack : Person? = Person.createPerson(name: "Jack", age: 34, address: london)
var elon : Person? = Person.createPerson(name: "Elon", age: 45, address: london)

jack = nil // jack de-init, london de-init

print(elon?.address?.city) // nil

这个问题有交换解吗?

最佳答案

这是预期的行为。在你的案例 1 中,london 仍然被你当前所在方法的上下文引用,这就是为什么它不应该被取消初始化的原因。这不是内存泄漏,伦敦将在上下文关闭时取消初始化,我。 e.当方法完成时。

关于ios - 相对内存引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59749901/

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