Вопрос проверяет понимание weak-ссылок и их поведения при освобождении памяти.
weak — это слабая ссылка, которая не увеличивает счетчик ссылок ARC. Если объект удаляется, weak-ссылка автоматически становится nil. Это помогает избежать циклов удержания.
Принцип работы weak:
Не влияет на счетчик ссылок — ARC не учитывает weak-ссылки при подсчете.
Автоматическое обнуление — при освобождении объекта weak-ссылка устанавливается в nil.
Пример:
class Person {
var name: String
init(name: String) { self.name = name }
deinit { print("\(name) удален") }
}
var john: Person? = Person(name: "John")
weak var weakJohn = john // Слабая ссылка
john = nil // Объект удаляется, weakJohn становится nil
print(weakJohn) // nilГде использовать:
Для избежания retain cycles (например, в замыканиях или делегатах).
Вывод:weak — безопасный способ ссылаться на объекты без риска утечек памяти.