¿Debo agregar subvenciones mediante progtwigción en init o ViewDidLoad y por qué?

He estado explorando algunas respuestas aquí y obtengo dos sugerencias diferentes:

  1. agregar en init Ejemplo en esta respuesta
  2. agregar en ViewDidLoad . Sugerido en esta respuesta

¿Cuál es la mejor práctica actual? La segunda respuesta parece ser más antigua (2010), así que me pregunto si es una práctica antigua, ya no sugerida.

Para un controller de vista no basado en -loadView , el lugar correcto está en -loadView . -loadView es responsable de inicializar la propiedad de view un controller de view , incluidas las subvistas. El sistema llamará a este método en el momento adecuado. Debe asignar algo a la propiedad de view del controller de view dentro de este método:

  - (void)loadView { UIView *view = ...; // create additional views here self.view = view; } 

Si tiene un controller de vista basado en XIB, la documentation dice que no anule -loadView . En este caso, debería ver trabajo inicial adicional en -viewDidLoad .

No, nunca hagas esas cosas en init.

Veo DidLoad o incluso viewWillAppear, nunca en init porque tu vista podría no estar allí en ese momento, me estaba sucediendo cuando estaba empezando que estaba configurando una cadena en una UILabel que no estaba allí e hizo que la aplicación fallara, pero esto funcionó en el simulador porque es mucho más rápido que un dispositivo real como el iPhone 3.

Lo mismo con el restablecimiento de datos y el cierre de los delegates y tales no deberían establecerse en desorder. Dealloc podría no recibir llamadas cuando crea que así será. Debe establecer tales operaciones dentro de viewWillDissapear o viewWillUnload.