Чем отличаются терминологии weak, strong и unowned в контексте управления памятью в программировании?

В контексте управления памятью в Swift (iOS) термины weak, strong и unowned относятся к типам ссылок, которые влияют на подсчет ссылок (ARC) и помогают избежать циклов удержания (retain cycles).

Короткий ответ

Что ответить на собеседовании

В контексте управления памятью в Swift (iOS) термины weak, strong и unowned относятся к типам ссылок, которые влияют на подсчет ссылок (ARC) и помогают избежать циклов удержания (retain cycles).

Подробный разбор

Ответ с пояснениями

В контексте управления памятью в Swift (iOS) термины weak, strong и unowned относятся к типам ссылок, которые влияют на подсчет ссылок (ARC) и помогают избежать циклов удержания (retain cycles).

  • strong — это обычная сильная ссылка, которая увеличивает счетчик ссылок объекта. Пока есть хотя бы одна сильная ссылка, объект не будет удалён из памяти.
  • weak — слабая ссылка, которая не увеличивает счетчик ссылок. Она используется, чтобы избежать циклов удержания. Слабая ссылка автоматически становится nil, когда объект, на который она ссылается, удаляется из памяти. Поэтому weak свойства должны быть опциональными.
  • unowned — также не увеличивает счетчик ссылок, но в отличие от weak, не является опциональной и не становится nil. Предполагается, что объект, на который ссылается unowned, будет существовать дольше, чем ссылка. Если объект удаляется, а unowned ссылка используется, произойдет ошибка времени выполнения.

Пример:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    unowned let tenant: Person
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

Здесь tenant — unowned, так как Apartment не должен удерживать Person сильной ссылкой, но Person гарантированно существует дольше Apartment.

Если бы была ситуация, где объект может исчезнуть раньше, лучше использовать weak.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее