¿Por qué no autoriza iOS una vista cargada desde una punta después de que fue liberada por didReceiveMemoryWarning?

Mi aplicación iPad hace un gran uso de la autorotation. Esto es genial. Sin embargo, me he dado count de que si la implementación pnetworkingeterminada de didReceiveMemoryWarning (como se describe aquí ) libera una vista oculta, cuando la vista se carga desde la punta y aparece en paisaje, la carga en retrato. Esto causa esgulps con la interfaz hasta que roté el iPad manualmente y lo forzo para ir a la orientación correcta.

Había asumido que iOS cargaría la vista en la orientación actual; eso es lo que hace cuando se inicia la aplicación. Pero no, no después de ser descargado por didReceiveMemoryWarning . Por qué no? ¿Y cómo puedo lograrlo?

La respuesta, determinada gracias a los indicadores de dbarker , es que los methods de rotation del controller de vista, que incluyen -willRotateToInterfaceOrientation:duration: y -willAnimateRotationToInterfaceOrientation:duration: no se didReceiveMemoryWarning se didReceiveMemoryWarning cargar una vista después de que la implementación pnetworkingeterminada de didReceiveMemoryWarning haya descargado el ver. No tengo idea de por qué sería diferente en el inicio de la aplicación, pero sí tengo una solución

Lo que hice fue establecer un ivar boolean, llamado unloadedByMemoryWarning, a YES en didReceiveMemoryWarning , así:

 - (void) didReceiveMemoryWarning { unloadedByMemoryWarning = YES; [super didReceiveMemoryWarning]; } 

Entonces, en viewDidLoad , si ese indicador es verdadero, lo fijo en NO y luego invoco los methods de rotation yo mismo:

 if (unloadedByMemoryWarning) { unloadedByMemoryWarning = NO; [self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0]; [self willAnimateRotationToInterfaceOrientation:self.interfaceOrientation duration:0]; [self didRotateFromInterfaceOrientation:self.interfaceOrientation]; } 

Un poco apesta que tengo que hacer esto, pero funciona, y ahora estoy less preocupado por ser asesinado por iOS por usar demasiada memory.

  1. Creo que iOS 5 podría solucionar esto.

  2. Para iOS 4.3, he tenido buena suerte con otra solución. Después de la carga desde la punta:

     [parent.view addSubview:nibView]; nibView.frame = parent.view.frame; [nibView setNeedsLayout]; 

    Si eso funcionara, podría descartar la lógica unloadedByMemoryWarning , ya que es seguro hacer todas las cargas. Tengo la propina y el código (básicamente) desde aquí .