Dada la sección de una aplicación que tiene un UINavigationController y 2 niveles de UITableViews (es decir, se selecciona una fila en el controlador raíz que empuja al segundo controlador a la pila de navegación) tengo las siguientes preguntas:
1) Hay un objeto Usuario que es requerido por ambos controladores. ¿Cuál es la mejor forma de comunicarse entre los dos controladores? He visto una publicación en este sitio que menciona la inyección de dependencias y que el controlador raíz podría pasar el objeto Usuario al controlador de segundo nivel de la siguiente manera:
@implementation SecondLevelViewController
-(void) initWithUser: (User *) user {
// myUser is an instance variable
myUser = user;
[myUser retain];
}
En ese ejemplo, parece que el segundo controlador retiene al usuario, mientras que he visto otras fuentes (por ejemplo, el curso de desarrollo de iPhone de Stanford) que recomiendan que el usuario simplemente se asigne, y no se conserve, en esa situación (acoplamiento libre).
También he visto argumentos para una forma de delegación en la que se usaría un objeto de identificación asignado en el segundo controlador (en lugar de una variable de instancia de Usuario retenida como se indicó anteriormente).
Sería genial si alguien pudiera aclararme este puesto, ya que estoy extremadamente confundido por el consejo aparentemente contradictorio en esta área. ¿Cuál es la mejor forma de comunicación entre los controladores de visualización?
2) Mi segunda pregunta también se refiere a la estructuración de los controladores. He visto ejemplos donde el controlador raíz (en la disposición anterior) tiene una matriz de controladores de segundo nivel instanciados. ¿Es esto normal en una aplicación profesional o habría un impacto significativo en la memoria al hacer las cosas de esta manera (es decir, sin carga diferida)? Supongo que la ventaja de la matriz es una reducción de los tiempos de carga para los controladores de segundo nivel.
Gracias por cualquier respuesta, ya que estoy tratando de desarrollar las cosas correctamente en lugar de hackearlas.