Определите недостатки в представленном Swift‑фрагменте №1

Цикла сильных ссылок здесь нет: Person сильно удерживает Pet, а Pet слабо ссылается на Person. weak owner автоматически станет nil после освобождения владельца.

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

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

Цикла сильных ссылок здесь нет: Person сильно удерживает Pet, а Pet слабо ссылается на Person. weak owner автоматически станет nil после освобождения владельца.

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

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

Условие

В приведённом примере создаются два класса — Person и Pet. Класс Person хранит имя и опциональную ссылку на питомца, а класс Pet хранит имя и слабую ссылку на владельца. После создания экземпляров john (персона) и dog (питомца) они взаимно связываются: john.pet = dog и dog.owner = john. Проанализируйте код и укажите, какие потенциальные проблемы могут возникнуть (например, связанные с управлением памятью, сильными/слабыми ссылками, опциональностью и т.п.).

import Foundation

class Person {
    var name: String
    var pet: Pet?

    init(name: String) {
        self.name = name
    }
}

class Pet {
    var name: String
    weak var owner: Person?

    init(name: String) {
        self.name = name
    }
}

var john = Person(name: "John")
var dog = Pet(name: "Buddy")

john.pet = dog
dog.owner = john

Ответ

Цикла сильных ссылок здесь нет: Person сильно удерживает Pet, а Pet слабо ссылается на Person. weak owner автоматически станет nil после освобождения владельца.

Показанные объявления корректны: weak применяется к optional-ссылке на класс, поэтому исчезновение владельца представимо. Само наличие pet и owner не является утечкой. Возможные улучшения относятся к модели: двусторонние связи сейчас можно рассинхронизировать при замене питомца, свойства полностью доступны для записи, политика смены владельца не определена. При обращении к dog.owner требуется безопасная обработка nil. Не стоит заменять weak на unowned без гарантии времени жизни Person.

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

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

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

Подробнее