2009-05-05 10 views

Respuesta

9

Usted no tiene que llamar al [súper viewDidLoad]

Por lo que yo sé, el viewDidLoad en la superclase (UIViewController) sólo es una función vacía que se llama cuando el ViewController se inicia con una punta -archivo.

Por lo tanto, si necesita realizar alguna inicialización, debe anular esta función y colocar allí su código.

16

Como dice Markus, UIViewController no hace nada en su método viewDidLoad, por lo que no tiene que llamarlo. Sin embargo, es un buen hábito entrar, en caso de que cambie su estructura de herencia y de repente la clase que solía heredar de UIViewController ahora hereda de algo que hace hacer algo en el método viewDidLoad.

47

Si está anulando el método, debe llamar al método en el super. Incluso si la súper clase no está haciendo nada con eso hoy, Apple podría algún día cambiar la implementación y su código misteriosamente dejará de funcionar. Si realmente no necesita hacer nada en ese método, déjelo fuera de su código por completo, y el método de Super se ejecutará como siempre, sin ninguna intervención de su parte.

27

No, no necesita necesita para llamar a [super viewDidLoad]. Editar: Pero lea a continuación, porque creo que definitivamente debe.

Seamos realistas aquí: Apple no romperá miles de aplicaciones, incluidas las basadas en su código de muestra publicado, al decidir que un evento que no están manejando repentinamente necesita hacer algo que los desarrolladores pueden o no quiero parar y es crítico que si no necesitas un comportamiento diferente, no detengas el evento.

Editar: Después de ver cómo Apple maneja la compatibilidad por un año más, ahora recomiendo aprender y usar el patrón correcto. Aunque dudo que el binario de su aplicación deje de funcionar repentinamente, está claro que el iPhone detecta en qué SDK se compiló su binario y modifica el comportamiento de algunos sistemas operativos en función de esto.

Apple podría algún día requerir que se siga un patrón en particular en algún futuro SDK. Esto no le afectará hasta que reconstruya con el último Xcode + SDK, pero luego obtendrá estos descansos sin ningún cambio en el código fuente. Aprenda y siga el patrón para estar seguro.

10

La documentación de Apple para viewDidLoad NO establece que deba llamar a [super viewDidLoad], así que me gustaría ir con lo que Apple dice. Sin embargo, tenga en cuenta que para otros métodos similares como viewDidAppear, debe llamar a [super viewDidAppear].

5

Acabo de notar que el analizador estático de Xcode 6 emite una advertencia si no llama súper en estas funciones. Entonces parece que Apple ahora definitivamente quiere que lo llamemos.

11

Digamos que tiene 2 clases, un padre y un niño. El niño hereda de Parent. Tienen un método llamado greet que devuelve una cadena.

Esto es lo que el método de los padres se ve así:

Código:

-(NSString *)greet { 
    return @"Hello"; 
} 

Queremos que el niño aprenda de sus padres. Así que utilizamos súper para saludar a mamá, pero con nuestras pequeñas adiciones también.

Código: // hereda de los padres

-(NSString *)greet { 
    NSString *parentGreeting = [super greet]; 
    return [parentGreeting stringByAppendingString:@", Mommy"] 
} 

Así que ahora los padres saluda "Hola", y el niño saluda "Hola, mamá". Más adelante, si cambiamos el saludo de los padres para que solo devuelva "Hola", ambas clases se verán afectadas y usted tendrá "Hola" y "Hola, mamá".

super se utiliza para llamar a un método tal como se define en una superclase. Se utiliza para acceder a los métodos que han sido modificados por subclases para que la clase pueda ajustar su propio código en un método que implemente su clase principal. Es muy útil si está haciendo algún tipo de herencia en absoluto.

0

Aunque en xCode 7 Beta/Swift 2 super.viewDidLoad no se compilará. El error dice que solo está disponible en osx 10.10 y la reparación automática lo hace

if #available(OSX 10.10, *){ 
super.viewDidLoad()} 
else 
{ 
// Fallback on earlier versions 
} 
// My code 
} 
+1

¡Estaba claramente preguntando por objetivo-c! – AMTourky

Cuestiones relacionadas