Будет ли вызываться deinit при исчезновении контроллера представления? - PullRequest
0 голосов
/ 17 марта 2019

Я создал два контроллера вида, как

Navigation controller -> View Controller -> Details View Controller
          1                     2                      3

(2) View Controller имеет кнопку, которая при нажатии отображает (3) Подробности View Controller. Я создал переход от кнопки к (3) ВК.

Я добавил deinit блоков в этих двух классах.

deinit {
    print("vc deinit")
}

Однако, это не регистрируется. Когда контроллер представления будет освобожден?

Пример кода

1 Ответ

2 голосов
/ 17 марта 2019

В этом случае вызывается только deinit - это второй (реализованный в Details View Controller) каждый раз, когда вы нажимаете кнопку «Назад» в навигации (переход к предыдущему контроллеру представления).

Итак, почему первый deinit (тот, что в View Controller) не был вызван?

Это потому, что это первый контроллер представления в контроллере навигации stack . Переход ко второму контроллеру представления не означает, что предыдущий (ие) объект был освобожден и все еще существует в качестве первого элемента в стеке навигации; Например, именно поэтому метод viewDidLoad не должен вызываться, когда вы возвращаетесь из контроллера popped view, что означает, что он не был освобожден.

...