может быть странное поведение панели навигации UINavigationController из-за утечек памяти? - PullRequest
0 голосов
/ 30 мая 2011

Я получаю странное поведение панели навигации, например, когда я нажимаю кнопку "назад", отображается экран предыдущего экрана, однако элементы панели навигации меняются.Поэтому у меня остался экран A, но с кнопками навигационной панели для экрана B.

Может ли это быть из-за утечек памяти?Я все еще замечаю в своем приложении:

  1. Такое поведение, кажется, происходит:

    • немедленно, если я запускаю предупреждение памяти через меню симулятора, или
    • на устройстве после того, как оно было включено некоторое время [без уничтожения, а затем перезапущено как приложение].
  2. У меня есть некоторые утечки памяти, япытается очистить (т. е. Profiler выделяет элементы в разделе «пропущенные блоки»)

Есть ли какие-либо советы по поиску неисправности, которая является основной причиной того, почему нажатие кнопки «Назад» может привести к странному состоянию?например, экран в предыдущем родительском представлении, но элементы навигационной панели не меняются ...

ОБНОВЛЕНИЕ - Я наконец-то удалил утечки памяти в своем приложении, однако я отмечаю, что проблема с навигационной панелью все еще остается.Полагаю, это не подтверждает, что ответ на мой вопрос в целом НЕТ, но в моем конкретном случае это не было утечкой памяти ...

Ответы [ 3 ]

1 голос
/ 02 июня 2011

от Apple:

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

Исходя из этого, я бы начал с поиска ошибки или неправильной конфигурации в ваших определениях представлений. Проверьте наличие предупреждений InterfaceBuilder, если вы определили свои представления с помощью NIB. Убедитесь, что иерархии ваших представлений верны в обоих UIViewControllers. Также проверьте возможные ошибки в методах жизненного цикла вашего представления: viewWillAppear:, viewWillDisappear: и т. Д.,

На самом деле, было бы неплохо, если бы вы могли опубликовать несколько скриншотов и / или код. Спасибо!

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

Я видел что-то подобное после звонка -[UINavigationController setViewControllers:]. Вы можете попытаться не делать никаких программных манипуляций с контроллером вида контроллера навигации, кроме вызова -[UINavigationController pushViewController:animated:].

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

Любое представление, которое в данный момент не отображается и сохраняется только его контроллером представления (как часть свойства представления этого контроллера представления), будет освобождено (вместе с любыми не сохраненными подпредставлениями), когда появится предупреждение о памяти.

Скорее всего, вы создаете представление как часть init, а не сохраняете его в контроллере (просто позволяя сокету вида удерживать его от освобождения).Одним из способов решения этой проблемы является создание свойств для созданных представлений (неатомных, сохраняемых), и после их создания и автоматического выпуска назначьте эти свойства, не забудьте назначить эти свойства nil как часть dealloc, чтобы избежать утечки.Другим способом является создание пользовательских элементов представления в viewDidLoad, а не init.

Трудно сказать без примера кода из оскорбительных представлений:)

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