28

Quelqu'un peut-il me dire quand utiliser les catégories et quand utiliser le sous-classement en Objective-C? Aussi s'il vous plaît dites-moi les avantages et les inconvénients d'entre eux.Quand utiliser les catégories et quand utiliser le sous-classement?

+1

double possible de [la différence entre l'héritage et catégories dans Objective-c] (http://stackoverflow.com/questions/522341/difference-between-inheritance-and-categories-in-objective-c) –

+0

Qu'avez-vous découvert à leur sujet jusqu'à présent? Qu'essayez-vous de faire avec eux? Qu'est-ce qui vous amène à croire qu'ils sont liés de quelque façon que ce soit? –

Répondre

40

Une catégorie d'objectif-c est utile si vous souhaitez modifier le comportement de TOUTES les instances de la classe, avec un code minimal. Le sous-classement est plus utile si vous souhaitez modifier le comportement de certaines instances uniquement et conserver la méthode d'origine pour les autres.

Les catégories peuvent être dangereuses, en particulier si vous ne pouvez pas afficher la source de la méthode d'origine. Vous devez donc généralement utiliser des sous-classes sur des frameworks tiers et privés plutôt que sur une catégorie.

+0

Merci pour votre réponse rapide ... –

+0

@coneybeare, Peut-on dire que la catégorie ne change pas les objets où la sous-classe change l'objet? S'il vous plaît dire – Sandy

+0

Je dirais l'inverse. Une catégorie modifie les méthodes disponibles sur une instance d'un objet, où sous-classe crée un nouvel objet d'un type différent. – coneybeare

8

Ajout à ce que dit déjà coneybeare. Le sous-classement est une meilleure option pour la personnalisation, et les catégories sont mieux à utiliser lorsque vous souhaitez simplement ajouter des fonctionnalités aux classes existantes.

13

Catégorie: Il est utilisé si nous voulons ajouter une méthode sur une classe donnée dont la source est inconnue. Ceci est essentiellement utilisé lorsque nous voulons modifier le comportement de n'importe quelle classe. Par exemple: Si nous voulons ajouter une méthode sur NSString pour inverser une chaîne, nous pouvons opter pour des catégories. Sous-classement: Si nous voulons modifier l'état ainsi que le comportement de n'importe quelle classe ou remplacer toutes les méthodes pour modifier le comportement de la classe parente, nous procédons à la sous-classification. Par exemple: Nous sous-classez UIView pour modifier son état et son comportement dans notre code iOS.

3
  • Voulez-vous changer quelque chose qui se produit dans le cadre du cadre appelle au cours du cycle de vie d'un objet de l'interface utilisateur? Utiliser la sous-classe. Remplacer méthodes respectives, telles que init, drawRect, layoutSubviews etc.

  • Voulez-vous que l'application de quelque chose de large, ce qui est en
    plus des fonctionnalités existantes, et vous ne vous inquiétez pas si ce
    devient disponible à toutes les instances de ces instances préexistantes de la classe de structure? Utilisez les catégories. Exemple: animer UILabel sur certaines actions de l'utilisateur et appliquer cette animation à l'ensemble de votre application à toutes les instances UILabel.

+0

Merci pour la réponse. J'ai un doute; Corrigez-moi si je me trompe - même si la catégorie et les sous-classes peuvent être utilisées de manière interchangeable, mais ce que vous avez mentionné ci-dessus est la meilleure pratique. En faisant cette déclaration, j'ai réfléchi à des cas d'utilisation - en remplaçant le comportement existant, en ajoutant de nouvelles fonctions, en ajoutant des variables pour maintenir l'état ou toute autre propriété. –

Questions connexes