viewDidAppear вызывается ДО того, как оно действительно появится? - PullRequest
1 голос
/ 14 июня 2011

Я знаю, что этот вопрос звучит похоже на это , но я уже знаю об обходном пути. Это больше вопрос анализа.

Приведенная выше ссылка является вопросом, специфичным для UITabBarController, но я также наблюдал поведение с UINavigationController, когда I pushViewController:... animated:NO, т.е. без анимации.

Так что мой вопрос: ПОЧЕМУ представление появляется ПОСЛЕ метода viewDidAppear, хотя само его название подразумевает, и определение говорит, что представление уже появилось (определение говорит, что представление было добавлено в окно).

Я отметил точку останова в методе, чтобы увидеть стек вызовов, и вот журнал для отправки на UINavigationController:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidApear:animated];
    NSLog("...");              // <<<<<Breakpoint here
}

Вот лог:

(gdb) next
Single stepping until exit from function -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:], which has no line number information.
(gdb) next
Single stepping until exit from function -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:], which has no line number information.
(gdb) next
Single stepping until exit from function -[UINavigationTransitionView _navigationTransitionDidStop], which has no line number information.
(gdb) next
Single stepping until exit from function -[UIViewAnimationState sendDelegateAnimationDidStop:finished:], which has no line number information.
(gdb) next
Single stepping until exit from function +[UIViewAnimationState popAnimationState], which has no line number information.
(gdb) next
Single stepping until exit from function dyld_stub_objc_msgSend, which has no line number information.
(gdb) next
Single stepping until exit from function objc_msgSend, which has no line number information.
(gdb) next
Single stepping until exit from function -[NSObject(NSObject) release], which has no line number information.
(gdb) next
Single stepping until exit from function dyld_stub_objc_msgSend, which has no line number information.
(gdb) next
Single stepping until exit from function objc_msgSend, which has no line number information.
(gdb) next
Single stepping until exit from function -[UIViewAnimationState dealloc], which has no line number information.
(gdb) next
Single stepping until exit from function -[UINavigationTransitionView transition:fromView:toView:], which has no line number information.
(gdb) next
Single stepping until exit from function -[UINavigationTransitionView transition:toView:], which has no line number information.
(gdb) next
Single stepping until exit from function -[UINavigationController _startDeferredTransitionIfNeeded], which has no line number information.
(gdb) next
Single stepping until exit from function -[UILayoutContainerView layoutSubviews], which has no line number information.
(gdb) next
Single stepping until exit from function -[CALayer layoutSublayers], which has no line number information.
(gdb) next
Single stepping until exit from function dyld_stub_objc_msgSend, which has no line number information.
(gdb) next
Single stepping until exit from function objc_msgSend, which has no line number information.
(gdb) next
Single stepping until exit from function -[NSObject(NSObject) release], which has no line number information.
(gdb) next
Single stepping until exit from function CALayerLayoutIfNeeded, which has no line number information.

1 Ответ

0 голосов
/ 14 июня 2011

Я обнаружил следующее:

  • ViewWillAppear: я обычно использую ViewWillAppear просто для обновления данных в форме.Итак, для примера выше, я бы использовал это для загрузки данных из моего домена в форму.Создание UIViews довольно дорого, и вам следует избегать, насколько это возможно, использования метода ViewWillAppear, поскольку при его вызове это означает, что iPhone уже готов показать UIView пользователю и все, что вы здесь делаете.будет влиять на производительность очень заметным образом (например, задержка анимации и т.д.)выполнить, как, например, сделать вызов веб-службы, чтобы получить дополнительные данные для формы выше. Хорошо то, что, поскольку представление уже существует и отображается для пользователя, вы можете показать пользователю приятное сообщение «Ожидание», покаВы получаете данные

Украденные из SO-вопроса: В чем разница между -viewWillAppear: и -viewDidAppear:?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...