Общие вопросы
Смешанные вопросы по Swift.
Открыть разделБаза Hintsage
Язык Swift и разработка приложений в экосистеме Apple.
Темы раздела
Смешанные вопросы по Swift.
Открыть разделТипы, функции, структуры, классы и базовая семантика.
Открыть разделOptionals, value/reference semantics, casting и pattern matching.
Открыть разделProtocols, extensions, associated types и generic constraints.
Открыть разделCollections, closures, map/filter/reduce и sequences.
Открыть разделARC, reference cycles, weak/unowned и время жизни объектов.
Открыть разделasync/await, actors, tasks и безопасность данных.
Открыть разделthrows, Result, defer и моделирование ошибок.
Открыть разделПрактика
Какую ссылку выбрать для дочернего объекта, если его время жизни гарантированно не превышает время жизни владельца?
Практическая ситуация: после обнуления внешней ссылки проверьте, будет ли вызван 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-замыкании?
Что происходит с объектом при самоприсваивании его сильной ссылке?
При создании замыкания, выходящего за пределы метода, чем отличается захват свойства от захвата экземпляра для времени жизни владельца?
Показано 201–220 из 651