2012-03-11 19 views
6

Estoy aprendiendo acerca de UINavigationController y UIViewController s. Aquí está la sencilla aplicación que construyo. Tenga en cuenta que uso ARC.¿Cómo funcionan UINavigationController y UIViewController?

Mi aplicación tiene un controlador de navegación y dos controladores de vista (llamémoslos FirstViewController y SecondViewController). Cuando se inicia la aplicación, el controlador de navegación empuja el FirstViewController en la pila.

En FirstViewController tengo un botón que empuja el SecondViewController cuando se toca. Aquí hay un código.

FirstViewController.m

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

En el segundo controlador de vista tengo un botón que pop el controlador de vista actual de la pila.

SecondViewController.m

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

Hasta ahora, todo bien. Aquí están mis preguntas:

¿El control de navegación comprueba una instancia existente de SecondNavigationController y si no existe entonces crea una nueva?

Si no, ¿debo usar singleton para asegurarme de que solo se crea una instancia y volver a utilizarla en lugar de crear una nueva instancia cada vez que se toca el botón que empuja el SeconViewController?

Respuesta

4

Con su código actual, el segundo controlador de vista se destruirá cuando se saque de la pila, por lo que no, el controlador de navegación no lo volverá a utilizar.

Si realmente desea mantener el segundo controlador de vista, conviértalo en una propiedad sólida del primer controlador de vista, pero no lo haga a menos que tenga una razón para hacerlo: el método que está utilizando es estándar y está creando generalmente se prefiere un nuevo controlador de vista para ocupar mucha memoria con controladores de vista que ni siquiera están en la pantalla. La memoria es más escasa que el recurso del procesador, la creación de controles de vista ocurre todo el tiempo.

+0

No, no quiero quedarme cerca del segundo controlador de vista. Tenía curiosidad sobre cómo funciona el controlador de navegación. ¡Gracias por la explicación! – ihodo

+0

Para no comenzar un nuevo tema.Si mi aplicación contiene, digamos, cuatro controladores de vista, los controladores de vista primero y segundo se usan solo una vez en la aplicación. ¿Debo mostrarlos ([auto.navigationController popViewControllerAnimated: YES]) desde el controlador de navegación para no utilizar la memoria? – ihodo

+0

No, solo use presionar y hacer estallar para moverse hacia arriba y hacia abajo en la pila de navegación. – jrturton

1

Estoy de acuerdo con jrturton y añado las siguientes pautas.

Primero, en mi opinión, no es una buena idea hacer controladores como singletons.

Luego, debe verificarse si existe una instancia de algún tipo en la "matriz de controladores UINavigationController".

@property(nonatomic, copy) NSArray *viewControllers 

Finalmente, puede crear una referencia fuerte para su controlador pero no es necesario en absoluto. La creación de un nuevo controlador es muy rápido. En lugar de tener una referencia fuerte de él, almacenaría en caché los datos presentados en él, en su caso. Esto para evitar que el usuario espere datos ya descargados.

Espero que ayude.

+0

¡Gracias también! – ihodo

+0

De nada. votacion si quieres :) –

Cuestiones relacionadas