В цикле ссылок между объектом-владельцем и делегатом какую ссылку выбрать, если делегат может исчезнуть раньше владельца?
База Hintsage
ARC и память
ARC, reference cycles, weak/unowned и время жизни объектов.
Практика
Вопросы: ARC и память
Какую ссылку выбрать для дочернего объекта, если его время жизни гарантированно не превышает время жизни владельца?
Практическая ситуация: после обнуления внешней ссылки проверьте, будет ли вызван deinit, и объясните механизм.
final class Worker {
lazy var action: () -> Void = {
print(self)
}
deinit {
print("deinit")
}
}
var worker: Worker? = Worker()
worker?.action()
worker = nil
Сравните поведение слабой и невладеющей ссылки при обращении после уничтожения объекта.
Что определяет момент уничтожения объекта под управлением ARC, если сильная ссылка всё ещё находится в области видимости?
В какой ситуации объект Swift может быть уничтожен до конца лексической области видимости и как гарантировать его жизнь до завершения операции с небезопасным указателем?
Как меняется время жизни экземпляра класса во время вызова функции, если он передан обычным параметром?
При создании 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()
При переназначении последней сильной ссылки на другой экземпляр когда старый объект становится доступен для уничтожения?
Объясните механизм: что происходит с экземпляром класса при копировании структуры, содержащей сильное свойство-ссылку на этот экземпляр?
Разберите случай: при создании большого числа Objective-C-объектов в цикле память растёт до конца итерации run loop, хотя локальные ссылки уже исчезли. Какой механизм ARC объясняет это?
Что происходит с временем жизни объекта при чтении weak-ссылки?
Что происходит с числом сильных ссылок на объект при присваивании его weak-ссылке?
Почему слабая ссылка в Swift должна быть optional?
Опишите, кто отвечает за время жизни экземпляра Swift, переданного через Unmanaged.
Разбор ошибки: к чему приводит обращение к unowned(unsafe)-ссылке после уничтожения объекта-владельца?
Какая особенность подсчёта ссылок мешает ARC автоматически освобождать недостижимый цикл сильных ссылок?
Зачем Swift требует объявлять weak-ссылку переменной, а не константой?
После возврата функции благодаря чему сохраняется захваченное локальное состояние в escaping-замыкании?
Что происходит с объектом при самоприсваивании его сильной ссылке?
Показано 1–20 из 100