Sono consapevole che l'utilizzo dei setter in dealloc può creare problemi, se un altro oggetto sta osservando le modifiche in una proprietà. Ma perché non dovremmo usarli negli inizializzatori?Perché non è una buona pratica usare l'auto nel metodo di inizializzazione in Objective-C?
risposta
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.
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.
- 1. è una buona pratica usare mysql_free_result ($ result)?
- 2. È buona pratica usare assert in Java?
- 3. È una cattiva pratica avere un lungo metodo di inizializzazione?
- 4. L'istanza è una buona pratica?
- 5. L'inizializzazione statica è una buona pratica di programmazione?
- 6. Perché usare XML per creare GUI è una buona pratica in Android
- 7. è buona pratica usare iframe per implementare header/navbar?
- 8. La sottodominio www è una buona pratica?
- 9. È buona pratica esportare variabili in Perl?
- 10. È buona pratica usare la pluralità per denominare le raccolte?
- 11. ViewHolder - buona pratica
- 12. È una buona pratica usare una gif animata in sprite css?
- 13. Il casting di oggetti è una buona pratica?
- 14. È anche una buona idea usare OData?
- 15. È buona norma usare size_t in C++?
- 16. È una cattiva pratica usare campi nascosti?
- 17. Nel blocco catch try è male tornare nella cattura? che è una buona pratica
- 18. Questa buona pratica è un'eccezione personalizzata?
- 19. È una buona pratica di query REPLACE INTO?
- 20. AsyncTask all'interno di un metodo statico: buona pratica di codifica?
- 21. Java - Questa è una buona pratica di programmazione?
- 22. È una buona ragione per usare alloca?
- 23. È !! una buona pratica per verificare un valore reale
- 24. Metodo di buona pratica per caricare JavaScript tramite ajax
- 25. Una buona pratica/progetto per programmatore PHP
- 26. Questo modello singleton C# modificato è una buona pratica?
- 27. È buona pratica rimuovere i tag ID dai controlli che non faccio riferimento nel codice dietro
- 28. buona pratica in C++ (valutazione lazy)
- 29. VERIFY (...) è una buona pratica nella codifica C++?
- 30. È una cattiva pratica usare Reflection in Unit testing?
Le persone hanno ogni sorta di "regole" per Objective-C che cercano di impadronirsi di te. Puoi tranquillamente ignorare circa il 90% se di loro. –