Я делаю еще одну попытку сегодня попытаться понять циклы сохранения и слабые ссылки в Swift. Прочитав documentation, я увидел следующий пример кода, в котором одна из ссылочных переменных помечена как weak
, чтобы предотвратить цикл сохранения
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { print("\(name) is being deinitialized") }
}
class Apartment {
let unit: String
init(unit: String) { self.unit = unit }
weak var tenant: Person? // <---- This var is marked as 'weak'
deinit { print("Apartment \(unit) is being deinitialized") }
}
var john: Person?
var unit4A: Apartment?
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")
john!.apartment = unit4A
unit4A!.tenant = john
john = nil // prints "John Appleseed is being deinitialized"
unit4A = nil // prints "Apartment 4A is being deinitialized"
Есть ли проблема с тем, чтобы обе переменные были слабыми? То есть в классе Person
я могу изменить переменную apartment
, чтобы она была слабой, чтобы я имел
class Person {
// ...
weak var apartment: Apartment? // added 'weak'
// ...
}
class Apartment {
// ...
weak var tenant: Person?
// ...
}
где есть две слабые переменные, которые ссылаются друг на друга.
Я тестировал его на игровой площадке, и, похоже, он работает нормально, но есть ли сильная причина не делать этого? Похоже, в этом случае нет никаких отношений между родителями и детьми.