90 votes

Différence entre catégorie et extension de classe?

Quelle est la différence entre une catégorie et une extension de classe? Je crois que les deux sont utilisés pour ajouter des méthodes personnalisées dans les classes existantes. Quelqu'un peut-il éclairer cette question? Un examen avec code sera vraiment apprécié.

107voto

Dave DeLong Points 156978

Une catégorie est un moyen d'ajouter des méthodes à des classes existantes. Ils ont leur résidence habituelle dans des fichiers appelés "Classe+nom de catégorie.h", comme "NSView+CustomAdditions.h" (et .m, bien sûr).

Une extension de classe est une catégorie, sauf pour les 2 principales différences:

  1. La catégorie n'a pas de nom. Il est déclaré comme ceci:

    @interface SomeClass ()
    
    
    
    - (void) anAdditionalMethod;
    
    @end
  2. La mise en œuvre de l'extension doit être dans la main @mise en œuvre de bloc du fichier.

Il est assez commun de voir une extension de classe au sommet d'une .m fichier déclarent plus des méthodes de la classe, qui sont ensuite mis en œuvre ci-dessous dans la main @mise en œuvre de la section de la classe. C'est une façon de déclarer "pseudo-privé" méthodes (pseudo-privé en ce qu'ils ne sont pas vraiment privé, tout simplement pas une exposition externe).

49voto

user3767017 Points 1
 1.category

-> In objective c, when you want to add some more   functionality to a class without inheritance, you simply use category for it.

-> it come with its own .h and .m file 

-> Category use to add new method not properties.


2.class extension

-> In objective c, when you want to make behavior of some property private you use class extension.

->its come with .h file only.

->mainly for properties.
 

Remarque: lorsque nous ajoutons un nouveau fichier et sélectionnons une option de la catégorie objectif c, il affiche la catégorie et "catégorie sur", pas la "sous-classe de", montrer comme

 @interface className (categoryName)
@end
 

-vous obtenez deux fichier .h et. avec un nom de fichier tel que (className + categoryName.h et className + categoryName.m)

et dans la catégorie cas où vous obtenez

 @interface className()
@end
 

-vous obtenez un seul fichier portant le nom className_extensionName.h

 * In category you dont own the class but in extension you are.
 

2voto

Exploring Points 708
 @interface SomeClass ()


- (void) anAdditionalMethod;


@end
 

Je pense que ce n'est pas le moyen de déclarer la catégorie. La catégorie doit avoir un nom

 @interface SomeClass (XYZ)


- (void) anAdditionalMethod;


@end
 

par exemple

 @interface NSMutableArray (NSMutableArrayCreation)

+ (id)arrayWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end
 

Déclaré pour NSMutableArray par Apple

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X