6

Я узнаю о UINavigationController и UIViewController s. Вот простое приложение, которое я создаю. Обратите внимание, что я использую ARC.Как работает UINavigationController и UIViewController?

У моего приложения есть контроллер навигации и два контроллера вида (назовем их FirstViewController и SecondViewController). Когда приложение запускается навигационным контроллером, нажмите FirstViewController на стек.

В FirstViewController У меня есть кнопка, которая нажимает SecondViewController при касании. Вот какой код.

FirstViewController.m

-(IBAction)pushSecondViewController 
{ 
    SecondViewController *secondViewController = [SecondViewController alloc]init]; 
    [self.navigationController pushViewController:secondViewController animated:YES]; 
} 

Во втором контроллере представления У меня есть кнопка, которая поп текущего контроллера представления из стека.

SecondViewController.m

-(IBAction)popViewController 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

До сих пор, так хорошо. Вот мои вопросы:

Контролирует ли navigationController существующий экземпляр SecondNavigationController, а если таковой не существует, то он создает новый?

Если нет, следует ли использовать singleton, чтобы убедиться, что только один экземпляр создан и повторно используется вместо создания нового экземпляра каждый раз, когда нажата кнопка, которая нажимает SeconViewController?

ответ

4

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

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

+0

Нет, я не хочу держать вокруг второго контроллера. Мне было любопытно, как работает контроллер навигации. Спасибо за объяснение! – ihodo

+0

Чтобы не начинать новую тему.Если мое приложение содержит, скажем, четыре диспетчера представлений, первый и второй контроллеры представлений используются только один раз в приложении. Должен ли я поместить их ([self.navigationController popViewControllerAnimated: YES]) с контроллера навигации, чтобы не использовать память? – ihodo

+0

Нет, используйте только push и popping для перемещения вверх и вниз по стеку навигации. – jrturton

1

Я согласен с jrturton и добавляю следующие рекомендации.

Во-первых, на мой взгляд, не рекомендуется создавать контроллеры как одиночные.

Затем вы должны проверить себя, существует ли экземпляр какого-либо типа в массиве контроллеров UINavigationController.

@property(nonatomic, copy) NSArray *viewControllers 

Наконец, вы можете создать прочную ссылку для своего контроллера, но это совсем необязательно. Создание нового контроллера очень быстро. Вместо того, чтобы иметь сильную ссылку на него, я буду кэшировать данные, представленные на нем, если таковые имеются. Это позволит пользователю ждать уже загруженных данных.

Надеюсь, это поможет.

+0

Спасибо тоже! – ihodo

+0

Добро пожаловать. upvote, если хотите :) –

Смежные вопросы