Объясните механизм: что происходит с экземпляром класса при копировании структуры, содержащей сильное свойство-ссылку на этот экземпляр?
База Hintsage
ARC и память
ARC, reference cycles, weak/unowned и время жизни объектов.
Практика
Вопросы: ARC и память
При переназначении последней сильной ссылки на другой экземпляр когда старый объект становится доступен для уничтожения?
При создании callback объект уже существует, но позже переменная service переназначается. К какому объекту обратится callback?
final class Service {
let id: String
init(_ id: String) { self.id = id }
deinit { print("deinit \(id)") }
}
var service: Service? = Service("A")
let callback: () -> Void = { [weak service] in
print(service?.id ?? "nil")
}
service = Service("B")
callback()
Как меняется время жизни экземпляра класса во время вызова функции, если он передан обычным параметром?
В какой ситуации объект Swift может быть уничтожен до конца лексической области видимости и как гарантировать его жизнь до завершения операции с небезопасным указателем?
Что определяет момент уничтожения объекта под управлением ARC, если сильная ссылка всё ещё находится в области видимости?
Сравните поведение слабой и невладеющей ссылки при обращении после уничтожения объекта.
Практическая ситуация: после обнуления внешней ссылки проверьте, будет ли вызван deinit, и объясните механизм.
final class Worker {
lazy var action: () -> Void = {
print(self)
}
deinit {
print("deinit")
}
}
var worker: Worker? = Worker()
worker?.action()
worker = nil
Какую ссылку выбрать для дочернего объекта, если его время жизни гарантированно не превышает время жизни владельца?
В цикле ссылок между объектом-владельцем и делегатом какую ссылку выбрать, если делегат может исчезнуть раньше владельца?
Показано 41–50 из 50