【发布时间】:2020-05-02 03:08:23
【问题描述】:
在下面的代码中,我有一个人,一个人有一个地址(现在仅限城市)。
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 这个人,那么 london 就不会为零。
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 为弱,那么 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
这个问题有交换解吗?
【问题讨论】: