Какой вывод получит программа №13

Для показанной цепочки ожидается C, A, B, A: сначала deinit Gamma и его суперкласса, затем освобождаются принадлежащие ему объекты.

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

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

Для показанной цепочки ожидается C, A, B, A: сначала deinit Gamma и его суперкласса, затем освобождаются принадлежащие ему объекты.

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

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

Условие

Рассмотрите следующий Swift‑код и определите, какие строки будут выведены в консоль при завершении программы.

import UIKit

class Alpha {
    deinit {
        print("A")
    }
}

class Beta {
    let a = Alpha()

    deinit {
        print("B")
    }
}

class Gamma: Alpha {
    let b = Beta()

    deinit {
        print("C")
    }
}

var instance: Gamma? = Gamma()
instance = nil

Ответ

Для показанной цепочки ожидается C, A, B, A: сначала deinit Gamma и его суперкласса, затем освобождаются принадлежащие ему объекты.

Первое A относится к части Alpha самого экземпляра Gamma, а не к полю Beta.a. После выполнения deinit по цепочке наследования освобождается поле Gamma.b: его Beta печатает B, а освобождение собственного поля a печатает второе A. Здесь нет циклов удержания и внешних ссылок на b/a, поэтому они также уничтожаются. Важно различать наследование Gamma: Alpha и композицию Gamma → Beta → отдельный Alpha.

Источник: forums.swift.org.

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

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

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

Подробнее