Этот вопрос проверяет понимание различных типов ссылок в Swift и их использования для управления памятью в ARC.
Strong ссылки увеличивают счётчик ссылок и удерживают объект в памяти. Weak ссылки не увеличивают счётчик и становятся nil, когда объект удаляется. Unowned ссылки также не увеличивают счётчик, но вызывают crash при обращении к удалённому объекту. Weak безопаснее, но unowned немного быстрее.
В Swift ссылки используются для управления жизненным циклом объектов в ARC.
1. Strong references:
Увеличивают счётчик ссылок на объект.
Объект remains in memory до тех пор, пока есть хотя бы одна strong ссылка.
2. Weak references:
Не увеличивают счётчик ссылок.
Всегда optional и автоматически становятся nil, когда объект удаляется.
Используются для breaking cycles в parent-child отношениях.
3. Unowned references:
Также не увеличивают счётчик ссылок.
Не optional и предполагают, что объект всегда существует.
Если объект удалён, обращение к unowned ссылке вызывает crash.
Используются, когда lifetime объекта точно известен (например, делегаты).
Сравнение weak vs unowned:
Безопасность: Weak безопаснее, так как становится nil.
Производительность: Unowned немного быстрее, так как не требует проверки на nil.
Использование: Weak для опциональных связей, unowned для гарантированно существующих объектов.
Пример:
class Parent {
weak var child: Child? // weak чтобы избежать цикла
}
class Child {
unowned let parent: Parent // unowned, так как parent всегда существует
}