У меня есть приложение, которое основано на UINavigationController
. Существует экран меню с кнопками, которые переходят (нажимают на стек навигационного контроллера) на один из 9 других «подэкранов». Ни один из этих субэкранов не переходит на любой другой экран. Когда пользователь выполнит ввод данных на «субэкран», они могут нажать кнопку «Готово», которая вернется к исходному экрану меню. (Если у вас возникли трудности с изображением этого, представьте себе дерево, подобное раскадровке, где есть один корневой ViewController, а затем 9 leaf viewControllers).ViewDidLoad и UINavigationController в iOS?
Хорошо, поэтому с этой настройкой у меня есть несколько вопросов о том, как работает viewDidLoad
.
~ Во-первых, это viewDidLoad
, который должен быть вызван каждый раз, когда мы переходим на дополнительный экран. Например, предположим, что я перехожу с экрана меню на субэкран «B», обратно на экран меню, а затем обратно на субэкран «B». Должен ли метод B viewDidLoad
вызываться дважды? Если нет, то зачем мне звонить дважды?
~ Во-вторых, если предположить, что он будет вызван каждый раз, что делать, если у меня много длинных операций, которые нужно выполнять ровно один раз для каждого подэкрана? Куда я должен поместить их (если я поместил их в viewDidLoad
, это произошло бы несколько раз, если бы пользователь продолжал идти туда и обратно между этой страницей и меню)?
viewDidLoad будет вызываться только один раз для каждого раза, когда представление было «init» ed не каждый раз, когда оно добавлено в стек. – sunrize920
В своем ответе я объяснил, что «каждый раз, когда B выскочит из стека, выпущенный, и каждый раз, когда вы идете в B, создается новый экземпляр B. «aka init/viewDidLoad будет вызываться каждый раз, когда вы посещаете B. –
Я бы не сказал, что он обычно выпущен. viewDidUnload вызывается только на контроллере представления, когда свойство вида выпущено/установлено в nil, и это обычно происходит только в том случае, если приложение получает предупреждение о памяти. – sunrize920