didMoveToParentViewController y willMoveToParentViewController

La documentation de Apple en UIViewController dice:

Si está implementando su propio controller de vista de contenedor, debe llamar al método willMoveToParentViewController: del controller de vista secundaria antes de llamar al método removeFromParentViewController , pasando un valor padre de cero.

Cuando su contenedor personalizado llama al addChildViewController: automáticamente llama al método willMoveToParentViewController : el método del controller de vista se agregará como un elemento secundario antes de agregarlo.

Si está implementando su propio controller de vista de contenedor, debe llamar al método didMoveToParentViewController: del controller de vista secundaria después de que se complete la transición al nuevo controller o, si no hay transición, inmediatamente después de llamar al addChildViewController:

El método removeFromParentViewController llama automáticamente al método didMoveToParentViewController: del controller de vista secundario después de que quita el elemento secundario.

¿Por qué debería llamar a estos methods? ¿Qué hacen esos methods?

 ProfileViewController *profile = [[ProfileViewController alloc] init]; profile.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); [self addChildViewController:profile]; [self.view addSubview:profile.view]; [profile didMoveToParentViewController:self]; 

Mi código funciona perfectamente aunque elimino la última línea. ¿Puede alguien ayudarme en esto?

Gracias por adelantado

Estos methods se utilizan porque es una regla que se debe seguir al agregar o eliminar un controller de vista secundario. Antes de agregar un controller de vista secundario, se willMoveToParentViewController método willMoveToParentViewController seguido por el método didMoveToParentViewController . Al quitar el controller de vista secundaria del controller de vista principal, estos methods se deben llamar en order inverso.

addChildViewController: llama automáticamente a [child willMoveToParentViewController:self] . Entonces uno debe llamar a didMoveToParentViewController después de addChildViewController: Del removeFromParentViewController: modo removeFromParentViewController: llama automáticamente a [child didMoveToParentViewController:nil] . Entonces uno debe llamar a willMoveToParentViewController: antes de removeFromParentViewController:

Básicamente, no hacen nada que puedas notar en la interfaz. "Sin embargo, cualquier subclass permite que se anulen, por lo que si no los llama, no romperá un UIViewController desnudo, pero romperá las subclasss que dependen de él (por ejemplo: digamos que una subclass quiere liberar un object cuando se elimina de un controller de vista padre, si no llama al método, nunca lanzará el object). " como se explicó en los comentarios aquí .