Чем отличается использование ключевых слов 'unowned' и 'strong' при объявлении ссылок в Swift?

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

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

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

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

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

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

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

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

Пример:

class Person {
    var apartment: Apartment?
}

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

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

Здесь tenant объявлен как unowned, потому что квартира не должна удерживать человека сильной ссылкой, чтобы избежать цикла, но при этом предполагается, что человек существует дольше квартиры.

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

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

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

Подробнее