28

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?

+1

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) –

+0

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? –

risposta

40

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.

+0

Grazie per la tua risposta veloce ... –

+0

@coneybeare, possiamo dire che la Categoria non cambia gli oggetti dove la sottoclasse cambia l'oggetto? per favore dillo allo – Sandy

+0

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

8

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.

13

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.

3
  • 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.

+0

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à. –