2012-09-20 23 views
21

Acabo de instalar la nueva versión de Xcode/ios6. viewDidUnload ahora está depreciado.viewDidUnload ya no se llama en ios6

En el documento manzana,

viewDidUnload [...] en desuso en iOS 6.0. Las vistas ya no se purgan en condiciones de poca memoria, por lo que este método nunca se llama.

Pero número de aplicaciones están utilizando esta devolución de llamada para liberar sus propiedades, como:

- (void)viewDidUnload { 
    [super viewDidUnload]; 

    self.recipientButton = nil; 
    self.connectButton = nil; 
    self.infoLabel = nil; 
} 

Esta fue la mejor práctica para liberar sus IBOutlets.

Así, la primera pregunta:
Lo que va a ocurrir estas aplicaciones existentes en iOS 6? ¿Van a tener fugas?

y segunda:
¿Cuál es la nueva forma recomendada para liberar una propiedad IBOutlet? En el método dealloc?

Respuesta

22

para la primera pregunta:

Su ViewController recibirán método didReceiveMemoryWarning devolución de llamada y se puede nula a cabo las vistas & otros componentes de este método

Para referencia se echa un WWDC 2012 Sesión de video en EVOLUCIÓN DE LA VISTA CONTROLADOR , en caso de que no lo haya hecho (creo que están disponibles solo para desarrolladores registrados, pero no estoy seguro).

Responda a su segundo.

[liberación del objeto]; en dealloc. No es necesario asignar nil al objeto antes de liberarlo.

+0

Gracias por su respuesta. De hecho, estoy más interesado en la primera pregunta. Pero como dice http://stackoverflow.com/a/9281416/127493 (por ejemplo, hay números de otros temas), las propiedades de IBOutlet deben publicarse en viewDidUnload en la práctica recomendada anterior. – Martin

+0

@martin Por favor, compruebe la respuesta editada –

+0

Por supuesto, '[object release];' in dealloc solo es posible si * no * ejecuta ARC. –

9

recomiendo que utilice la propiedad débil de los IBOutlets como

@property (weak) IBOutlet UILabel * labelText; 

De esa manera usted no tiene que hacer nada en dealloc. En iOS 6, simplemente ViewDidUnload no llamará, iOS5 o anterior solo se llama cuando se ha producido una advertencia de memoria.

1

y segundo: ¿Cuál es la nueva forma recomendada de liberar una propiedad de IBOutlet ? En el método dealloc?

¿Cuál es la "vieja" manera recomendada? Siempre debe liberar las variables de instancia retenidas en dealloc; siempre ha sido así y sigue siendo así.

era sólo que en viewDidUnload (que sólo se pide poca memoria) que podría también establecer sus propiedades a nil.