2012-02-24 8 views

risposta

6

L'unico motivo per non utilizzare gli accessor in -init è perché l'oggetto non è completamente inizializzato e l'accessorio può dipendere da esso. È probabile che ciò si verifichi solo se si dispone di una sottoclasse che sovrascrive i metodi di accesso.

C'è un problema simmetrico sulla deallocazione in quanto una funzione di accesso sovrascritta può dipendere dal non essere richiamato su un oggetto parzialmente deallocato. C'è anche il problema che potresti inviare spurie notifiche KVO.

Questo va al cuore del corretto incapsulamento. Le sottoclassi non dovrebbero avere bisogno di preoccuparsi dei dettagli di implementazione della super classe.

8

Non ho mai avuto problemi con gli accessor negli inizializzatori. Forse dipende da quanta magia hai nei setter e nei getter: se gli utenti hanno fatto qualcosa di troppo intelligente, potresti trovarti nei guai quando li usi nell'inizializzatore.

Ora che ci penso, uso anche gli accessor in dealloc. Di nuovo, senza problemi. Se qualcuno sta osservando un oggetto, dovrebbe assicurarsi che l'oggetto non venga deallocato in primo luogo.

Quindi, a meno che qualcun altro fornisca un contro-argomento convincente, penso che si potrebbe provare a utilizzare gli accessor sia in init e dealloc e vedere come funziona per voi.

Problemi correlati