6

Uczę się o UINavigationController i UIViewController s. Oto prosta aplikacja, którą buduję. Zauważ, że używam ARC.Jak działają UINavigationController i UIViewController?

Moja aplikacja ma kontroler nawigacyjny i dwa kontrolery widoku (nazwijmy je FirstViewController i SecondViewController). Po uruchomieniu aplikacji kontroler nawigacyjny popycha FirstViewController na stosie.

W FirstViewController Mam przycisk, który popycha SecondViewController po dotknięciu. Oto kod.

FirstViewController.m

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

W drugim kontrolerze widoku mam przycisk, który pop regulatora prądu widok ze stosu.

SecondViewController.m

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

Tak daleko, tak dobrze. Oto moje pytania:

Czy navigationController sprawdza istniejącą instancję o numerze SecondNavigationController, a jeśli takie nie istnieje, to tworzy nową?

Jeśli nie, czy powinienem użyć singletonu, aby upewnić się, że tylko jedno wystąpienie zostanie utworzone i ponownie użyte zamiast tworzenia nowej instancji za każdym razem, gdy zostanie naciśnięty przycisk, który popycha SeconViewController?

Odpowiedz

4

Przy obecnym kodzie drugi kontroler widoku zostanie zniszczony, gdy zostanie wyskakujący ze stosu, więc nie, kontroler nawigacyjny nie użyje go ponownie.

Jeśli naprawdę chcesz zachować drugi kontroler widoku, uczyń go silną właściwością pierwszego kontrolera widoku, ale nie rób tego, chyba że masz powód, aby - metoda, której używasz jest standardowa i nowy kontroler widoku jest zwykle preferowany do zajmowania dużej ilości pamięci za pomocą kontrolerów widoku, których nie ma nawet na ekranie. Pamięć jest mniej zasobna niż zasoby procesora, dlatego tworzenie kontrolerów widoku odbywa się przez cały czas.

+0

Nie, nie chcę przechowywać drugiego kontrolera widoku. Byłem ciekawy, jak działa kontroler nawigacyjny. Dzięki za wyjaśnienie! – ihodo

+0

Aby nie zaczynać nowego tematu.Jeśli moja aplikacja zawiera cztery kontrolery widoku, pierwsze i drugie kontrolery widoku są używane tylko raz w aplikacji. Czy powinienem je wysłać ([self.navigationController popViewControllerAnimated: YES]) z kontrolera nawigacji, aby nie korzystać z pamięci? – ihodo

+0

Nie, używaj tylko przesuwania i przesuwania, aby poruszać się w górę iw dół stosu nawigacyjnego. – jrturton

1

Zgadzam się z jrturton i dodaję następujące wytyczne.

Po pierwsze, moim zdaniem nie jest dobrym pomysłem, aby kontrolerów jako singletons.

Następnie należy sprawdzić, czy instancja danego typu istnieje w "tablicy kontrolerów" UINavigationController.

@property(nonatomic, copy) NSArray *viewControllers 

Na koniec można utworzyć silne odwołanie do kontrolera, ale nie jest to wcale konieczne. Stworzenie nowego kontrolera jest bardzo szybkie. Zamiast silnego odniesienia się do niego, zapisałbym dane w pamięci podręcznej, jeśli takie istnieją. Pozwala to uniknąć oczekiwania użytkownika na już pobrane dane.

Mam nadzieję, że to pomaga.

+0

Dziękuję też! – ihodo

+0

Nie ma za co. awansuj jeśli chcesz :) –