Во-первых, контроллер представления предназначен для одновременного управления всей иерархией представления;у вас не должно быть двух активных контроллеров представления (кроме контроллеров контейнера, таких как UINavigationController) одновременно.См. этот ТАК вопрос и мой ответ , чтобы лучше понять этот важный момент.Таким образом, конкретная ситуация, которую вы описываете, не должна возникать.(Кроме того, люди часто путают представления и контроллеры представлений, поэтому не полезно давать названиям ваших контроллеров представлений, оканчивающихся на «-view», например «blueView». Чтобы избежать путаницы, назовите его «blueViewController».)
Во-вторых, как указывает @InsertWittyName, -viewDidLoad
- это метод UIViewController, а не метод UIView.Делая этот шаг дальше, ни контроллеры представления, ни -viewDidLoad
не играют никакой роли в добавлении или удалении подпредставлений из представления.-viewDidLoad
вызывается при первом создании представления контроллера представления.По сути, это просто способ отложить относящуюся к представлению часть инициализации контроллера представления до тех пор, пока не будет создана иерархия представления, поэтому нет причин, чтобы он вызывался снова только потому, что подпредставление было удалено из иерархии.
Наконец, то, как именно представление удаляет себя из своего суперпредставления, на самом деле является деталью реализации - оно может вызывать закрытый метод UIView для суперпредставления или оно может напрямую изменять список подпредставлений суперпредставления или что-то еще.Я не вижу в документации ничего, что явно говорит о том, что суперпредставление будет перерисовываться после удаления подпредставления, но по моему опыту суперпредставление действительно перерисовывает себя.Вы можете проверить это, установив точку останова на методе -drawRect
суперпредставления.