Я изменил навигацию в своем приложении с помощью UITabBarController на u UINavigationController. То есть прежнее решение (1-я версия) было основано только на TabBarController - 4 ViewControllers (один простой TableView, один простой пользовательский вид и один MapView со многими оверлеями). Вторая версия основана только на UINavigationController.Управление памятью при использовании NavigationController
В случае с TabBarController это было ясно и просто, все работало отлично, особенно MapView. Я имею в виду: MapView был загружен один раз (со значительным количеством наложений), и когда я перешел к другому представлению и вернулся к MapView, MapView все еще был там с уже загруженными и отображаемыми надписями (простая проверка: вызывается MapView`s viewDidLoad только один раз за запуск приложения, у меня там были отладочные сообщения).
Теперь я сменил навигационную логику на UINavigationController. Все работает отлично для первого взгляда, но: viewDidLoad (для каждого представления) вызывается каждый раз, когда я перехожу к представлению. Это особенно раздражает в случае MapView - загрузка наложений выполняется каждый раз, это занимает некоторое время, и в некоторых случаях это приводит к сбою приложения.
OK, мои вопросы:
Является ли это своего рода "общего" поведения NavigationController?
Могу ли я изменить это поведение, так что viewDidLoad будет вызываться только один раз?
И многое другое - Как я могу повлиять на «последовательность отображения» некоторого вида?
Я понимаю, логика, вероятно, более сложный, но я ценю любой ответ или намек;)
Некоторые родственные обстоятельства:
- TabBar и навигационные контроллеры не объединены.
- Я использую раскадровки, segues разработаны в UIB, без ручного вызова, такого как perfomSegue или prepareForSegue в моем коде. Одна кнопка вызывает переход к MapView.
- Я использую push segues.
- Я также пытался использовать модальные сеги, но без каких-либо изменений в этом поведении.
- любой из viewDidUnload никогда не вызывается во время segues среди просмотров.
- Предупреждение о получении памяти не получено.
- Отсутствие утечек памяти, измеренных как на симуляторе, так и на iPhone 4.
- Я попытался создать очень простой временный проект/приложение, касающееся только Nav. Контроллер и другие виды без ЛЮБОГО кодирования, просто раскадровка. Это было одно и то же поведение.
- Возникла проблема, вызывающая сбой приложения, когда я быстро и периодически постучал в навигационную кнопку и обратно между одним видом и MapView. В большинстве случаев приложение разбилось, когда я нажал кнопку «Назад» на MapView до того, как он был полностью отображен (т. Е. Его оверлеи). Это было исправлено, когда я добавил 1 сек. вызов метода задержки в viewDidDisappeared в MapView.Это не справедливо исправить, я знаю;)
перед распределением класса карты, нажимая его на контроллер навигации, проверьте, равен ли его нуль, если nil затем распределяет его, а затем напрямую нажимайте класс карты на навигационном контроллере. – prasad