Эта проблема, кажется, все еще присутствует в Xcode 10.0 (10A255). У меня есть детская площадка со следующим кодом:
class Person {
var name: String
func buy(car: Car) {
car.owner = self
}
init(name: String) {
self.name = name
print("Person \(name) is initalized")
}
deinit {
print("Person \(name) is being deinitialized")
}
}
class Car {
let model: String
weak var owner: Person?
init(model: String) {
self.model = model
print("Car \(model) is initialized")
}
deinit {
print("Car \(model) is being deinitialized")
}
}
print("===== before do =====")
do {
print(" ---- do begin -----")
let johnny = Person(name: "John")
let porsche = Car(model: "Carrera4")
johnny.buy(car: porsche)
print(" ---- do end -----")
}
print("===== after do =====")
В Xcode 9.4.1 выполняются deinit и Car, и Person, но в Xcode 10.0 (10A255) метод deinit Person не выполняется.
Тот же код внутри тестового проекта MacOS работает как положено (оба выполняются deinit) в Xcode 9.4.1, а также в Xcode 10.0 (10A255)