Cambiar el rootViewController de una UIWindow

Cuando primero se carga mi aplicación, configuro la propiedad rootViewController de mi UIWindow a controllerA .

En algún momento durante mi aplicación, elijo cambiar el rootViewController a controllerB .

El problema es que, a veces, cuando hago una transición inversa en la controllerB , veo la vista de la controllerA . Por alguna razón, esa vista no se elimina. Lo que es aún más preocupante es que después de configurar rootViewController en controllerB , el método dealloc nunca se dispara.

He intentado eliminar manualmente las subejerciales de UIWindow antes de cambiar a la controllerB UIWindow , que resuelve el problema de ver las vistas de controllerA en segundo plano, pero el desalocador de controllerA todavía no recibe llamadas. ¿¿¿¿Que está pasando aqui????

Las manzanas dicen:

El controller de vista raíz proporciona la vista de contenido de la window. La asignación de un controller de vista a esta propiedad (ya sea mediante progtwigción o usando Interface Builder) instala la vista del controller de vista como la vista de contenido de la window. Si la window tiene una jerarquía de vista existente, las vistas anteriores se eliminan antes de instalar las nuevas.

ACTUALIZAR

Aquí está el código de mi AppDelegate:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self showControllerA]; [self.window makeKeyAndVisible]; return YES; } - (void)showControllerA { ControllerA* a = [ControllerA new]; self.window.rootViewController = a; } - (void) showControllerB { ControllerB* b = [ControllerB new]; self.window.rootViewController = b; } 

Resulta que hay dos problemas separados. 1) Tuve un ciclo de retención en el Controlador A, por lo que nunca me quedaba desocupado. En segundo lugar, para cambiar el controller de la vista raíz debe eliminar primero las subvenciones de Windows (aunque los documentos sugieran lo contrario)

El problema podría estar en su implementación de ControllerA o ControllerB, ellos pueden retener 'self' en el código para que ARC no lo reparta automáticamente ViewController. ¿Puede publicar la implementación de ControllerA y ControllerB?