Подтвердить что ты не робот

Что именно будетMoveToParentViewController: и didMoveToParentViewController: делать?

Я знаю, что, начиная с iOS5 и новых методов удержания UIViewController, вы должны вызвать эти методы вместе с addChildViewController:, removeFromParentViewController: и методом перехода. Я также знаю правильный порядок вызова их в трех сценариях. Я не знаю, что именно делают эти методы?

Если бы это были просто переопределенные точки для подклассов UIViewController, я думаю, нам не потребовалось бы вызывать super при переопределении. Что может/произойдет неправильно, если я не вызываю willMoveToParentViewController: nil перед удалением контроллера представления или didMoveToParentViewController: self?

4b9b3361

Ответ 1

В дополнение к тому, что было сказано, они вызывают некоторые методы делегатов:

addChildViewController вызывает [child willMoveToParentViewController:self]

и removeFromParentViewController: вызывает [child didMoveToParentViewController:nil]

Кроме того, они изменяют свойство childViewControllers, которое содержит массив дочерних контроллеров представления.

Ответ 2

На это много ответов:

  • Они есть, и вы должны называть их, где это применимо, чтобы всегда поддерживать шаблон. Таким образом, если вы измените суперклассы с UIViewController на свой собственный контроллер представления, вам не придется беспокоиться о том, где вы следовали всему шаблону.

  • Они лучше подходят для подключения, чем для того, чтобы все могли переопределить addChildViewController:. Как вы говорите, неправильное управление willMoveToParentViewController: звучит как менее опасное, чем неправильное обращение addChildViewController:, особенно если вы забыли позвонить super.

  • UIViewController, вероятно, зависит от того, что вы поддерживаете шаблон. Возможно, он сочтет несогласованное состояние, если он знает, что получил addChildViewController:, но никогда не получает два других сообщения. Независимо от того, происходит ли это из-за UIViewController ведения бухгалтерского учета, чтобы заманить вас в отстаивание полного шаблона или вы действительно испортите его внутреннее состояние, это забавная игра с угадыванием, но также и то, что может измениться в любой версии iOS. Все может сломаться. Вот почему шаблон существует, потому что Apple сообщит вам, что пока вы это делаете, мы будем продолжать работать независимо от того, что.

Опрос шаблона хорош, но есть много потенциальных негативов, которые приходят с попыткой сократить ваше соответствие шаблону кости. Если шаблон не смехотворно связан, его обычно легче согласовать с ним.