Eliminar último UIViewController después modal segue

Entonces tengo 3 controlleres de vista en storyboard, (VC1, VC2 y VC3).

Cada vista tiene un button que llama a una IBAction, que llama a este método para ir modal a otra vista:

[self doSegue: myViewController_ID]; -(void) doSegue:(NSString *)_myViewController_ID { //get UiViewController from storybord with Unique ID UIStoryboard *storyboard = self.storyboard; UITableViewController *svc = [storyboard instantiateViewControllerWithIdentifier:_myViewController_ID]; //set presentation & transition styles svc.modalPresentationStyle = UIModalPresentationFullScreen; svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; //do segue [self presentViewController:svc animated:YES completion:nil]; } 

Vamos a establecer que vaya de VC1 a VC2, una vez en VC2

Lo que quiero es eliminar ViewController anterior (VC1). y si ahora voy a VC3 desde VC2 quiero eliminar de la jerarquía de vista o astackr VC2 y así sucesivamente.

Esto es porque no proporcionaré un [self dismissViewControllerAnimated:YES completion:nil]; método

No quiero que la memory crezca como resultado de la acumulación de todos los controlleres de vista en la stack.

NOTA: No utilizaré un controller de navigation o un controller de tabs, solo el controller de vista.

Gracias por tu ayuda.

Solo una conjetura, no lo intenté …

Mantenga una reference de VC1 en VC2 -> envíela usando prepareForSegue:

Luego en VC2

 [self.previousViewController willMoveToParentViewController:nil]; [self.previousViewController removeFromParentViewController]; 

Solo para asegurarte de insert en tu controller de vista

 - (void)dealloc { NSLog(@"dealloc: %@", self); } 

y echa un vistazo a la console


Editar: en lugar de eliminar cada controller de vista después de la segue, puede hacerlo cuando reciba una advertencia de memory. También puede intentar con dismissViewControllerAnimated: finalización: después de la segue

 - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. // ??? if ([self isViewLoaded] && self.view.window == nil) { NSLog(@"UNLOADING"); self.view = nil; [self dismissViewControllerAnimated:NO completion:nil]; } }