2012-05-22 1 views
2

J'ai un fichier appelé ManageAddressBook.m Le fichier a deux @implementation dansQu'est-ce que cela signifie en Objective-C

Qu'est-ce que le second veut dire?

@implementation ManageAddressBook 

@end 

@implementation NSString (Additions) 

@end 
+0

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html – Almo

+2

Plus que probable, il est une indication d'une mauvaise conception. Alors que les catégories sont utiles, coller des catégories sur des classes existantes peut avoir une mauvaise odeur de code. – bbum

+0

duplication possible de [Que signifie le texte entre parenthèses dans les directives @interface et @implementation?] (Http://stackoverflow.com/questions/7378479/what-does-the-text-inside-parentheses-in-interface- et-implementation-directiv) –

Répondre

8

La première implémentation est juste une nouvelle classe. La deuxième implémentation est essentiellement des méthodes d'extension à une classe existante, appelées Catégories. Voir l'article: Categories and Extensions pour plus d'informations.

Comme résumé au sommet du lien:

Une catégorie vous permet d'ajouter des méthodes à une classe existante, même à celui pour lequel vous n'avez pas la source. Les catégories sont une fonctionnalité puissante qui vous permet d'étendre la fonctionnalité des classes existantes sans sous-classement. En utilisant les catégories, vous pouvez également distribuer l'implémentation de vos propres classes parmi plusieurs fichiers. Les extensions de classe sont similaires, mais permettent de déclarer des API supplémentaires requises pour une classe dans des emplacements autres que ceux du bloc @interface de la classe principale.

5

La deuxième met en oeuvre un Objective-C Category sur NSString, à savoir des procédés qui fonctionnent sur NSString, mais ne sont pas fournis par les auteurs de NSString classe. L'ajout de catégories vous permet d'étendre les fonctionnalités d'une classe d'une manière similaire aux méthodes d'extension de C#: les objets commencent à répondre aux messages définis dans les catégories, ce qui vous permet d'écrire des fonctionnalités de manière flexible et modulaire .