У меня есть следующий код:
class Company {
let name: String
var founder: Person?
init(name: String) {
self.name = name
print("\(self.name) was initialized")
}
deinit {
print("\(self.name) was deinitialized")
}
}
class Person {
let name: String
weak var company: Company?
init(name: String) {
self.name = name
print("\(self.name) was initialized")
}
deinit {
print("\(self.name) was deinitialized")
}
}
var mark: Person?
var facebook: Company?
mark = Person(name: "Mark Zuckerberg")
facebook = Company(name: "Facebook")
mark!.company = facebook
facebook!.founder = mark
facebook = nil
mark = nil
У меня слабая ссылка на человека, но все равно кажется, что есть цикл сохранения, потому что ни один из этих примеров не деинициализирован. Он печатает оператор инициализации, но не деинициализирующий.
Выход:
Mark Zuckerberg was initialized
Facebook was initialized