En el ejemplo de scrollView de Apple no llaman eso. Siempre pensé que era debe. ¿Por qué debería llamar eso de todos modos?¿Siempre tengo que llamar a [super viewDidLoad] en el método -viewDidLoad?
Respuesta
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.
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.
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.
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.
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].
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.
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.
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. ¿Por qué usamos [super viewDidLoad] en cada método viewDidLoad?
- 2. `[super viewDidLoad]` convención
- 3. UIViewController.View.Window es nulo en el método viewDidLoad
- 4. ¿Puedo usar el método viewDidLoad en UITableviewCell?
- 5. viewDidLoad y awakeFromNib timing
- 6. ¿Cuándo se llama a viewDidLoad?
- 7. viewDidLoad(), LoadView()
- 8. presentModalViewController en viewDidLoad en el primer lanzamiento
- 9. Llamadas múltiples a viewDidLoad/loadView
- 10. iOS viewDidLoad para UIView
- 11. viewDidLoad en NSViewController?
- 12. viewWillAppear vs viewDidLoad ios
- 13. ¿Se puede llamar a viewDidLoad antes de que 'init' de un viewController se ejecute por completo?
- 14. UIViewController -viewDidLoad no se llama
- 15. orientación actual del dispositivo iphone en ViewDidLoad
- 16. Xcode 4 - viewDidLoad problema
- 17. ¿Se está llamando a ViewDidLoad antes de initWithNibName?
- 18. ¿Con qué frecuencia se llama a viewDidLoad?
- 19. ¿No tengo que llamar a super() en el constructor cuando la clase extiende Sprite en actionscript3?
- 20. ¿Por qué es self.navigationController nulo en viewDidLoad?
- 21. no se puede actualizar view.layer.frame en viewDidLoad?
- 22. Diferencia entre viewDidLoad y viewDidAppear
- 23. viewDidLoad llamando antes de init?
- 24. Diferencia entre viewDidAppear, viewDidLoad en iPhone/iOS?
- 25. ¿Tengo que llamar a [super init] o [super initWithCoder], etc. para NSObject
- 26. -viewDidLoad no llamado en UIViewController subclasificado
- 27. Java:. Cómo llamar a super() super() en el método reemplazado (método abuelos)
- 28. EGOTableViewViewPullRefresh - Simular un desplegable en viewDidLoad
- 29. ¿Añado programáticamente SubViews en ViewDidAppear, ViewDidLoad, ViewWillAppear, el constructor?
- 30. ¿Por qué no funcionaSegueWithIdentifier dentro de viewDidLoad?
¡Estaba claramente preguntando por objetivo-c! – AMTourky