Что происходит с корневым представлением в UINavigationViewController, когда вы нажимаете на новое представление? - PullRequest
2 голосов
/ 04 февраля 2009

В частности, что я должен делать с видом, который теперь скрыт после нажатия на новый контроллер вида?
В моей ситуации у меня есть представление с анимацией, которая продолжает выполняться после того, как представление выключено.

Есть ли какая-то принятая конвенция? Удалить контроллер вида и вид из памяти?
Есть ли у Cocoa Touch удобный способ «приостановить» представление (и контроллер) и удалить его из памяти, а также вернуть его к существованию при необходимости (после всплывающего окна)? Нужно ли архивировать его самостоятельно, а затем разархивировать?

Есть ли примеры, на которые вы можете указать мне?

Спасибо

Ответы [ 3 ]

3 голосов
/ 05 февраля 2009

Другое возможное решение заключается в реализации двух из следующих методов:

– viewWillAppear:  
– viewDidAppear:  
– viewWillDisappear:  
– viewDidDisappear: 

Вы можете остановить анимацию в viewWillDisappear или viewDidDisappear, а затем перезапустить ее в viewWillAppear или viewDidAppear. Вы также можете сохранить любую необходимую информацию о состоянии анимации, прежде чем остановить ее.

2 голосов
/ 04 февраля 2009

При нехватке памяти, свойство 'view' вашего контроллера будет автоматически установлено равным nil, если его нет на экране. Затем представление будет автоматически загружаться снова, когда это необходимо - и в это время должен вызываться viewDidLoad.

Если ваш контроллер представления сохраняет какие-либо подпредставления представления верхнего уровня, то вы можете переопределить setView: метод контроллера представления, проверить, задано ли для представления значение nil, и, если это так, выпустить подпредставления, которые были у вас. удерживающий. В противном случае представление верхнего уровня может никогда не быть освобождено.

- (void)setView:(UIView *)view
{
    [super setView:view];
    if (view == nil)
    {
        // Release other views
        // self.someView = nil;
    }
}
1 голос
/ 07 февраля 2009

Каждый раз, когда вы вызываете pushViewController, текущий viewcontroller сохраняется в массиве контроллером навигации (доступ к нему можно получить с помощью свойства viewControllers navcontroller).

Думайте об этом как о стеке. Когда вы вызываете pushViewController, новый стек viewcontroller добавляется в стек поверх текущего viewcontroller. Но ваш rootview-контроллер все еще находится в памяти. Когда вы вызываете popViewController, этот viewcontroller удаляется из стека и освобождается.

Так что, если вы хотите остановить анимацию, когда вид исчезает, используйте метод viewWillDisappear, как предложил Энди.

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