Quand utiliser les catégories et quand utiliser le sous-classement?

Quelqu'un peut-il me dire quand utiliser des catégories et quand utiliser le sous-classement dans Objective-C? Veuillez également me dire les avantages et les inconvénients d'entre eux.

28
demandé sur Josh Caswell 2011-11-09 09:47:21

4 réponses

Une catégorie objective-c est utile si vous voulez 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 d'autres.

Les catégories peuvent être dangereuses, surtout 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 qu'une catégorie.

41
répondu coneybeare 2011-11-09 05:55:36

Category: il est utilisé si nous voulons ajouter une méthode sur une classe donnée dont la source n'est pas connue. 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 aller pour les catégories.

Subclassing: si nous voulons modifier l'état ainsi que le comportement de n'importe quelle classe ou remplacer n'importe quelle méthode pour modifier le comportement de la classe parente, alors nous optons pour le sous-classement.

Par exemple : nous sous-classe UIView pour modifier son état et son comportement dans notre code iOS.

15
répondu creative_rd 2014-05-09 15:05:18

Ajouter à ce que coneybeare a dit. Le sous-classement est une meilleure option pour la personnalisation, et les catégories sont mieux à utiliser lorsque vous voulez juste ajouter des fonctionnalités aux classes existantes.

8
répondu mariostallone 2011-11-09 10:16:34
  • Voulez vous changer quelque chose qui se passe dans le cadre appels pendant le cycle de vie d'un objet UI? Utilisez La Sous-Classe. Remplacer méthodes respectives, telles que init, drawrect, layoutsubviews etc.

  • Voulez-vous quelque chose d'application large, quelque chose qui est dans
    ajout à la fonctionnalité existante, et vous ne vous souciez pas si cela
    devient disponible pour toutes les instances de cette instance préexistante de la classe framework? Utiliser des catégories. Exemple: animation UILabel lors de certaines actions de l'utilisateur, et appliquez cette animation à travers votre application à toutes les instances UILabel.

3
répondu Nirav Bhatt 2015-12-16 08:57:36