2012-09-14 9 views
5

Ha senso scrivere self = [super init]; in un metodo di inizializzazione personalizzato mentre sottoclassi NSObject? So che è necessario quando sottoclassi qualsiasi altra classe, perché potrebbe avere un'inizializzazione personalizzata, ma il metodo init di NSObject fa qualcosa?Il metodo init NSObject fa qualcosa?

+4

È una buona abitudine entrare. – Kyle

risposta

9

Un oggetto non è pronto per essere utilizzato fino a quando non è stato inizializzato. Il metodo init definito nella classe NSObject non esegue l'inizializzazione; semplicemente restituisce se stesso.

Quindi in sostanza non è necessario chiamare [super init] in una sottoclasse NSObject, ma lo consiglierei comunque. È semplicemente un design migliore. Se cambi la superclasse, funzionerà ancora.

Fonte: NSObject Class Reference.

+5

+1 per "Lo raccomando ancora" - l'implementazione NSObject potrebbe cambiare, potresti cambiare la superclasse della tua classe, ecc. Non è compito della tua classe inferire le cose sul comportamento della sua superclasse. – Tim

+0

Grazie, ha senso. :) –

+4

No, davvero, il tuo codice è ** sbagliato ** se non si 'self = [super init ...];'. Non importa quale sia l'implementazione di 'NSObject'; utilizzare il pattern ovunque in modo coerente per ridurre al minimo la fragilità e poiché seguire gli schemi corretti documentati porta a più app gestibili. – bbum