Qualcuno può dirmi quando utilizzare le categorie e quando utilizzare la sottoclasse in Objective-C? Inoltre, per favore dimmi i vantaggi e gli svantaggi di loro.Quando utilizzare le categorie e quando utilizzare la sottoclasse?
risposta
Una categoria obiettivo-c è utile se si desidera modificare il comportamento di TUTTE le istanze della classe, con codice minimo. La sottoclasse è più utile se si desidera modificare il comportamento solo di determinate istanze e mantenere il metodo originale per gli altri.
Le categorie possono essere pericolose, soprattutto se non è possibile visualizzare la fonte del metodo originale, quindi è consigliabile utilizzare in genere sottoclassi su framework di terze parti e private anziché su una categoria.
Grazie per la tua risposta veloce ... –
@coneybeare, possiamo dire che la Categoria non cambia gli oggetti dove la sottoclasse cambia l'oggetto? per favore dillo allo – Sandy
Direi il contrario. Una categoria modifica i metodi disponibili su un'istanza di un oggetto, in cui la sottoclasse crea un nuovo oggetto di un tipo diverso. – coneybeare
In aggiunta a ciò che ha detto coneybeare. La sottoclasse è un'opzione migliore per la personalizzazione e le categorie sono preferibili da utilizzare quando si desidera aggiungere alcune funzionalità alle classi esistenti.
Categoria: Viene utilizzato se si desidera aggiungere qualsiasi metodo su una determinata classe la cui origine non è nota. Questo è fondamentalmente usato quando vogliamo modificare il comportamento di qualsiasi classe.
Ad esempio: se vogliamo aggiungere un metodo su NSString per invertire una stringa, possiamo andare per categorie.
Sottoclassi: Se si desidera modificare lo stato e il comportamento di qualsiasi classe o sovrascrivere qualsiasi metodo per modificare il comportamento della classe padre, si passa alla sottoclasse.
Ad esempio: sottoclasse UIView per modificarne lo stato e il comportamento nel nostro codice iOS.
Vuoi cambiare qualcosa che avviene nell'ambito del quadro chiama durante il ciclo di vita di un oggetto UI? Usa sottoclasse. Override rispettivi metodi, ad esempio init, drawRect, layoutSubviews ecc
Vuoi ampia applicazione qualcosa, qualcosa che è in
aggiunta alle funzionalità esistenti, e non ti importa se questo
diventa disponibile a tutte le istanze di queste istanze preesistenti della classe framework? Usa categorie. Esempio: anima UILabel su determinate azioni dell'utente e applica questa animazione attraverso la tua app a tutte le istanze di UILabel.
Grazie per la risposta. Ho un dubbio; per favore correggimi se ho torto, anche se la categoria e le sottoclassi possono essere usate in modo intercambiabile, ma quello che hai menzionato sopra è la migliore pratica. Mentre facevo questa affermazione, ho pensato ai casi d'uso, ignorando il comportamento esistente, aggiungendo nuove funzioni, aggiungendo variabili per mantenere lo stato o altre proprietà. –
possibile duplicato del [Differenza tra eredità e le categorie in Objective-C] (http://stackoverflow.com/questions/522341/difference-between-inheritance-and-categories-in-objective-c) –
Che cosa hai scoperto su di loro finora? Cosa stai cercando di fare con loro? Cosa ti porta a credere che siano imparentati in qualche modo? –