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?
Répondre
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.
Merci pour votre réponse rapide ... –
@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
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
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.
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.
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.
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é. –
- 1. Quand utiliser POJO et Quand utiliser SLSB
- 2. Quand utiliser IDataReader et quand utiliser DataReader?
- 3. Quand utiliser ContainerMovieClip et quand utiliser UIMovieClip?
- 4. Quand utiliser les classes abstraites et quand utiliser les interfaces
- 5. Quand utiliser directX et quand utiliser OpenGL?
- 6. Quand utiliser undef_method, et quand utiliser remove_method?
- 7. Quand utiliser conserver et quand utiliser copier
- 8. Quand utiliser XOR et quand utiliser IFF?
- 9. quand utiliser l'adaptateur et quand utiliser inflater
- 10. Quand utiliser un module et quand utiliser une classe
- 11. Quand utiliser l'activateur et quand utiliser la méthode d'usine?
- 12. Quand utiliser OSGi EventAdmin et quand?
- 13. Quand utiliser Interface et quand utiliser Résumé classe
- 14. Elixir: quand utiliser 'nombre' et quand utiliser 'nombre entier'
- 15. Quand utiliser les initialiseurs?
- 16. quand utiliser attribut et quand enfant?
- 17. Hibernate: Quand utiliser getSession() et quand utiliser getCurrentSession()?
- 18. En javascript, quand utiliser l'objet littéral et quand utiliser array?
- 19. Quand utiliser Value Formatter et quand utiliser Value Resolver
- 20. Quand utiliser les transitoires, quand ne pas?
- 21. Quand utiliser une classe et quand utiliser un dict?
- 22. quand utiliser SQL et quand utiliser la procédure stockée?
- 23. Quand utiliser/proc et quand/dev
- 24. Quand utiliser `zipmap` et quand` map vector`?
- 25. Quand utiliser "si" et "quand" dans Clojure?
- 26. Quand utiliser Socket et quand utiliser XMLSocket dans Flex?
- 27. Quand utiliser ArrayList et quand utiliser un tableau d'entiers simples
- 28. Quand libérer quand utiliser "withCompletionHandler"
- 29. Quand utiliser Hibernate?
- 30. Quand utiliser Page.DataBind() et Control.DataBind()?
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) –
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? –