При использовании ленивых инициализаторов существует ли вероятность сохранения циклов?
В сообщении в блоге и в других местах [unowned self]
отображается
class Person {
var name: String
lazy var personalizedGreeting: String = {
[unowned self] in
return "Hello, \(self.name)!"
}()
init(name: String) {
self.name = name
}
}
Я пробовал это
class Person {
var name: String
lazy var personalizedGreeting: String = {
//[unowned self] in
return "Hello, \(self.name)!"
}()
init(name: String) {
print("person init")
self.name = name
}
deinit {
print("person deinit")
}
}
Используется так
//...
let person = Person(name: "name")
print(person.personalizedGreeting)
//..
И обнаружил, что "person deinit" был зарегистрирован.
Итак, кажется, что циклов удержания нет. Согласно моим знаниям, когда блок захватывает себя, и когда этот блок сильно сохраняется сам, существует цикл сохранения. Этот случай похож на цикл удержания, но на самом деле это не так.