2010-03-02 20 views
23

Me gustaría saber si hay alguna diferencia entre llamar [super viewDidUnload] antes de la liberación de propiedades o después de ello.iPhone: [super viewDidUnload] orden de llamada

¡Gracias!

self.webView = nil; 
    self.fullText = nil; 
    [super viewDidUnload]; 

o

[super viewDidUnload]; 
    self.webView = nil; 
    self.fullText = nil; 
+0

relacionado: http://stackoverflow.com/questions/2148450/viewdidload-unload-messages-to-super – cregox

+1

posible duplicado de la convención ['[super viewDidLoad]'] (http://stackoverflow.com/questions/ 844195/super-viewdidload-convention) –

Respuesta

12

Esto depende de lo que haga la superclase en viewDidUnload. Si solo es un estándar UIViewController, cualquiera lo hará porque -[UIViewController viewDidUnload] no hace nada.

+0

¡Vaya, no veo que esto ya haya sido respondido de alguna manera! – conorgriffin

+1

¿qué pasa con el otro caso, es decir, si '[super viewDidUnload]' no es un 'UIViewController' estándar y hace algo en' viewDidUnload'? – matm

+5

@delirus: para los métodos que "limpian", la implementación del súper generalmente se llama después. Del mismo modo, los métodos que "inicializan" deben llamar súper primero. – rpetrich

2

Esto solo importa si la superclase de su vista realmente hace algo en viewDidLoad. El valor predeterminado UIViewController no hace nada en viewDidLoad, por lo que si su vista es un estándar UIViewController, puede poner [super viewDidLoad] en cualquier lugar del método viewDidLoad. Sin embargo, si super hace algo en viewDidLoad, entonces sí importa dónde ponga [super viewDidLoad].

+0

pregunta por [super viewDidUnload] not viewDidLoad. –

6

Esta pregunta no está completamente respondida. (Y es la primera vez que googleo sobre este tema, por lo que una respuesta completa sería útil para mí y para otros).

Si la superclase HACE algo en viewDidUnload, ¿cuál es el orden correcto para llamarlo en la vista de su claseDidUnload : antes o después de liberar propiedades?

Para el registro, parece que el consenso es para llamar al método súper ÚLTIMO:

-(void)viewDidUnload {
    self.some_property = nil;
    [super viewDidUnload];
}

10

Nunca pensé que importaba, pero que acaba de encontrar un error en la aplicación estrelló llamar primero. La tendencia en mi oficina ha sido llamarlo al final, pero la plantilla de Apple lo pone primero.

Puede hacer lo que quiera, pero siempre lo llamaré último a partir de ahora.

+1

Curiosamente, si arrastra las salidas de IB hacia el código subyacente, inserta las configuraciones nulas * antes de * la super llamada ... no tiene sentido dado las plantillas y la posición de los comentarios. – typeoneerror

+0

Experimentado lo mismo que @ZaBlanc. ¡Choque! – raheel

+0

Aunque la plantilla lo pone primero, siempre lo pongo en último lugar, como una característica de seguridad, en caso de que se descargue súper algo que pueda obstaculizar el programa. – ArtSabintsev

2

Esto es como el método dealloc.

- (void)dealloc 
{ 
    [array release]; 
    [super dealloc]; 
} 

Así que creo que deberíamos llamar al [super viewDidUnload] último.

+0

Apple debería actualizar su plantilla viewDidUnload. – neoneye

Cuestiones relacionadas