UIViewController: método no asignado de llamada local

Estoy trabajando con el recuento automático de references. Tengo una subclass UIViewController personalizada y siempre que llamo -presentViewController: animated:completion: o elimino su vista de la superview. Me gustaría NSLog algo como "Estoy desocupado", así que sé que el controller de vista se ha eliminado con éxito. He implementado el método -dealloc en mi controller de vista. Sin embargo, comencé un proyecto de testing en el que acabo de tener dos instancias de UIViewController (no hay ciclos de retención) y -dealloc no se llama cuando UIViewController el segundo UIViewController modal o cuando elimino la supervisión o cuando la elimino del controller de vista principal. Me estoy perdiendo de algo ? En mi proyecto original (no en el caso de testing), los instrumentos me muestran que esos controlleres dejan un espacio en la memory que no puedo deshacer.

Si desea cambiar los controlleres de vista y hacer que se desasigne el que está cambiando, simplemente cambie el controller de vista raíz de la window. Entonces, si estás en VC1 y quieres ir a VC2, haz esto en VC1:

 VC2 *vc2 = [[VC2 alloc] init]; // or however else is appropriate to get an instance of this class self.view.window.rootViewController = vc2; 

Si no ha creado ninguna propiedad para apuntar a vc1, se desasignará después de hacer este cambio.

Si desea utilizar una presentación modal o una segue modal (para get la animation cuando cambie de controller), todavía puede desasignar el controller inicial cambiando el controller de vista raíz después de la presentación desde el método viewDidAppear de vc2:

 -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.view.window.rootViewController = self; } 

Para get una printing cuando se desasigna el controller de vista, puede implementar el método dealloc como

 - (void) dealloc { NSLog(@"The instance of MyViewController was deallocated"); } 

Luego, para get una printing cuando el controller de vista dejó la vista, puede implementar

 - (void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; NSLog(@"The instance of MyViewController left the main view") } 

Si usa -presentViewController:animated:completion: está reteniendo parentViewController cada vez que llama a este método. ModalViewControllers simplemente se empuja sobre el otro ViewController.

ModalViewControllers solo está diseñado para algún tipo de información / Entrada de usuario y cosas por el estilo. Si desea desasignar ParentViewController, debe encargarse de su propia implementación.

El método dealloc no se invoca cuando se retiene la class (o se retiene algo de esta class) y no se vuelve a emitir. Es justo para proyectos con ambos ARC y sin él. Así que revisa tu código dos veces.