«Разместите этот код над методом viewDidLoad():
let user = User(name: „John“)
… но оператор print внутри deinit не был исполнен. Значит, этот объект не был освобождён, так как он не вышел из области видимости (scope).»
Очень странно, вообще deinit сработает, так как область видимости у let user — viewDidLoad.
Глупый ответ, неужели вы бы требовали от разработчика на собеседовании писать такое — «objc_getAssociatedObject и т д».
Сами небось полезли гуглить. Без выкрутасов из коробки язык не позволяет этого делать — ответ верный, остальное только удовлетворение вашего самолюбия.
Еще, как пример для избежания цикла ссылок — это создание контекста перед замыканием:
let context = (
parser: parser,
schema: schema,
titleLabel: titleLabel,
textLabel: textLabel
)
dataLoader.loadData(from: url) { data in
// We can now use the context instead of having to capture 'self'
let model = try context.parser.parse(data, using: context.schema)
context.titleLabel.text = model.title
context.textLabel.text = model.text
}
let user = User(name: „John“)
… но оператор print внутри deinit не был исполнен. Значит, этот объект не был освобождён, так как он не вышел из области видимости (scope).»
Очень странно, вообще deinit сработает, так как область видимости у let user — viewDidLoad.
Сами небось полезли гуглить. Без выкрутасов из коробки язык не позволяет этого делать — ответ верный, остальное только удовлетворение вашего самолюбия.
let context = (
parser: parser,
schema: schema,
titleLabel: titleLabel,
textLabel: textLabel
)
dataLoader.loadData(from: url) { data in
// We can now use the context instead of having to capture 'self'
let model = try context.parser.parse(data, using: context.schema)
context.titleLabel.text = model.title
context.textLabel.text = model.text
}
Вроде будет “Lines logged: 2”...“Lines logged: 4”