Nell'esempio scrollView di Apple non lo chiamano. Ho sempre pensato che fosse una deve. Perché dovrei chiamarlo comunque?Devo sempre chiamare [super viewDidLoad] nel metodo -viewDidLoad?
risposta
Non è necessario chiamare la [super viewDidLoad]
Per quanto ne so, il viewDidLoad nella superclasse (UIViewController) è solo una funzione di vuoto che viene chiamato quando il ViewController viene inizializzato con un pennino -file.
Quindi, se è necessario eseguire l'inizializzazione, è necessario sovrascrivere questa funzione e inserire il proprio codice.
Come dice Markus, UIViewController non esegue nulla nel suo metodo viewDidLoad, quindi non è necessario chiamarlo. Tuttavia, è una buona abitudine entrare nel caso in cui si modifichi la struttura di ereditarietà e improvvisamente la classe che ereditava da UIViewController ora eredita da qualcosa che fa qualcosa nel metodo viewDidLoad.
Se si sta sovrascrivendo il metodo, si dovrebbe comunque chiamare il metodo nel super. Anche se la super classe non ci sta facendo nulla oggi, Apple potrebbe un giorno cambiare l'implementazione e il tuo codice smetterà misteriosamente di funzionare. Se davvero non hai bisogno di fare nulla con questo metodo, lasciatelo completamente fuori dal tuo codice, e il metodo del super funzionerà come al solito, senza alcun intervento da parte tua.
No, non è necessario per chiamare [super viewDidLoad]. Modifica: ma leggi qui sotto, perché penso che sicuramente lo dovrebbe essere.
Cerchiamo di essere reale qui: Apple non sta per rompere migliaia di applicazioni, comprese quelle in base al loro codice di esempio pubblicato, decidendo un evento che non stanno attualmente la manipolazione improvvisamente bisogno di fare qualcosa che gli sviluppatori può o non può voglio fermarmi ed è fondamentale che se non hai bisogno di un comportamento diverso non fermi l'evento.
Modifica: Dopo aver visto come Apple gestisce la compatibilità per un anno in più, ora consiglio di apprendere e utilizzare lo schema corretto. Mentre dubito che il tuo binario dell'applicazione smetterà improvvisamente di funzionare, è chiaro che l'iPhone rileva quale SDK è stato costruito contro il tuo binario e modifica il comportamento del sistema operativo in base a questo.
Apple potrebbe un giorno richiedere che venga seguito uno schema particolare su alcuni SDK futuri. Ciò non influirà su di te fino a quando non sarai ricostruito con l'ultimo Xcode + SDK, ma otterrai queste interruzioni senza alcuna modifica al codice sorgente. Impara e segui lo schema per essere sicuro.
La documentazione di Apple per viewDidLoad NON indica che si dovrebbe chiamare [super viewDidLoad], quindi vorrei andare con quello che dice Apple. Nota, tuttavia, che per altri metodi simili come viewDidAppear, devi chiamare [super viewDidAppear].
Appena notato che l'analizzatore statico di Xcode 6 emette un avviso se non si chiama super in queste funzioni. Quindi sembra che Apple ora voglia definitivamente chiamarlo.
Diciamo che hai 2 classi, un genitore e un bambino. Il figlio eredita dal genitore. Hanno un metodo chiamato greet che restituisce una stringa.
Ecco ciò che il metodo genitore assomiglia:
Codice:
-(NSString *)greet {
return @"Hello";
}
vogliamo che il bambino di imparare dai suoi genitori. Quindi usiamo super per salutare come la mamma saluta, ma anche con le nostre piccole aggiunte.
Codice: // Eredita dal padre
-(NSString *)greet {
NSString *parentGreeting = [super greet];
return [parentGreeting stringByAppendingString:@", Mommy"]
}
Così ora Parent saluta "Ciao", e il bambino saluta "Ciao, mamma". Più tardi, se cambiamo il saluto dei genitori per tornare solo "Ciao", allora entrambe le classi saranno interessate e avrai "Ciao" e "Ciao mamma".
super è utilizzato per chiamare un metodo definito da una superclasse. Viene utilizzato per accedere ai metodi che sono stati sovrascritti dalle sottoclassi in modo che la classe possa racchiudere il proprio codice attorno a un metodo che è implementato nella classe parent. È molto utile se stai facendo qualsiasi tipo di eredità.
Sebbene in xCode 7 Beta/Swift 2 super.viewDidLoad non verrà compilato. L'errore dice che è disponibile solo in osx 10.10 e la correzione automatica lo fa
if #available(OSX 10.10, *){
super.viewDidLoad()}
else
{
// Fallback on earlier versions
}
// My code
}
chiaramente stava chiedendo di obiettivo-c! – AMTourky