Назад к вопросам
Wildberries
Альфа-Банк
Pyrus
Junior — Middle
81
Чем отличаются типы ссылок Strong и Weak в управлении памятью и ссылочной моделью?
Компании, где спрашивали
Uzum
Ответ от нейросети
sobes.tech AI
Strong-ссылка — это обычная сильная ссылка на объект, которая увеличивает счетчик ссылок (retain count) этого объекта. Пока существует хотя бы одна strong-ссылка, объект не будет удалён из памяти.
Weak-ссылка — это слабая ссылка, которая не увеличивает счетчик ссылок объекта. Она используется для предотвращения циклов удержания (retain cycles). Если объект, на который ссылается weak-ссылка, удаляется, то weak-ссылка автоматически обнуляется (становится nil).
Пример в Swift:
class Person {
var name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let unit: String
weak var tenant: Person? // weak ссылка, чтобы избежать цикла
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // weak-ссылка
Здесь weak-ссылка tenant не удерживает объект Person, что позволяет избежать утечки памяти.