Sobes.tech
Назад к вопросам
Junior — Middle
81

Чем отличаются типы ссылок Strong и Weak в управлении памятью и ссылочной моделью?

Компании, где спрашивали
WildberriesWildberries
Альфа-БанкАльфа-Банк
Uzum
PyrusPyrus

Ответ от нейросети

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, что позволяет избежать утечки памяти.