Что-то меня озадачивает, после просмотра моего приложения с инструментами, это приложение на основе UINavigation, оно это заметило.
Каждый раз, когда происходит прикосновение к ячейке tableView, и я делаю это:
GenericTableViewController *someViewController = [[Generic TableViewController alloc] init];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
Затем я нажимаю кнопку «Назад» и смотрю в «Инструменты», чтобы увидеть, сколько существует живых экземпляров GenericTableViewController. Перед ответным касанием 1 и 0 после.
Это здорово, хорошо управляет памятью с помощью UINavigationController.
Однако в других местах приложения я не использую кнопку «Назад» для выхода из вида, в некоторых viewController-ах при нажатии одной из моих пользовательских кнопок будет запускаться код, полностью аналогичный приведенному выше, но viewController, в котором я нажимал на пользовательский Кнопка, не будет выпущена.
Полагаю, я понимаю, почему навигационный контроллер выполняет оценочный вызов, что я, возможно, помещаю что-то в стек и что я вернусь позже, поэтому он сохраняет контроллер в своей памяти. Это должно означать, что нажатие кнопки «назад» использует [self.navigationController popViewController]
. Хорошо.
Проблема теперь в том, что каждый раз, когда я посещаю представление, которое не осталось, используя кнопку «назад» на панели навигации, оно
не будет выпущен. Распределение счетчиков в инструментах увеличивается с каждым разом, когда я посещаю вид, пока у меня не осталось 20 объектов.
Я попытался вставить [self.navigationController popViewController]
в селектор для своих пользовательских кнопок. Это означает, что я вручную извлекаю видимый viewController, прежде чем помещать новый в стек.
Но количество выделений не уменьшается? угадайте, что кнопка "назад" не использует эту технику в конце концов ...
Я также пытался использовать popToViewController, так как я всегда знаю, был контроллер в стеке или нет. Но чтобы использовать popToViewController, мне нужно сохранить ссылку на представление.
Есть ли какой-то здравый способ сказать UINavigationController: если этот viewController находится в вашем стеке, пожалуйста, покажите его, если нет, создайте его экземпляр, нажмите на стек и отобразите его.
Проблема здесь, вероятно, заключается в том, что не вся моя навигация в NavigationController полностью линейна. Мне иногда придется выходить из стека пункт №. 2, чтобы сложить предмет №. 5, вернуться к 3 и т. Д.
Так есть ли способ сделать это, при этом UINavigationController по-прежнему должен освобождать мои viewControllers и не создавать один и тот же viewController несколько раз?