iPhone Obj-C: Catégorie Anonyme ou Catégorie "Privée"?
Le Style d'une montre (et fonctionnellement, si il y a une différence), pour la déclaration des méthodes privées, ce qui est mieux?
@interface MyClass()
@interface MyClass(private)
source d'informationauteur Elliot
Vous devez vous connecter pour publier un commentaire.
Les deux syntaxes servent à des fins différentes.
Un nom de catégorie -- @interface Foo(FooCategory) -- est généralement utilisé pour:
(1) d'étendre une classe existante par l'ajout de fonctionnalités. Exemple: NSAttributedString dans la Fondation est prolongée par une catégorie dans AppKit qui ajoute AppKit spécifiques RTF-comme la mise en forme du texte de l'API.
(2) déclarer un ensemble de méthodes qui pourraient ou ne pourraient pas être mis en œuvre par un délégué. Exemple: les Différentes classes de déclarer -- mais ne pas mettre en œuvre -- @interface NSObject(SetODelegateMethods).
Forme (2) est tombé hors de la faveur, maintenant que @protocole a été étendu pour supporter @facultatif méthodes en Objective-C 2.0.
Une extension de classe -- @interface Foo() -- est conçu pour vous permettre de déclarer privés supplémentaires API-SPI ou le Système d'Interface de Programmation -- qui est utilisé pour implémenter la classe entrailles. Généralement, cela s'affiche en haut de l' .m de fichier. Toutes les méthodes /propriétés déclarées dans la classe de l'extension doit être mis en œuvre dans le @mise en œuvre, tout comme les méthodes/propriétés trouvé dans les public @interface.
Les extensions de la classe peut également être utilisé pour redeclare un public readonly @bien comme readwrite avant @synthétiser avec les accesseurs.
Exemple:
Foo.h
Foo.m
Oui,
il y a les différences suivantes.
1) à l'Aide de anonyme catégories requiert la mise en œuvre de ses méthodes dans les principaux @mise en œuvre de bloc pour la classe correspondante; anonyme catégories vous permettent de déclarer supplémentaires API requis pour une classe dans des endroits autres que dans la classe primaire @bloc d'interface
2) Lors de l'utilisation de MyClass(privé), les éléments suivants doivent être pris en compte: objet/catégorie nommée paires doit être unique. Si vous déclarez une privé de la catégorie sur votre propre classe, alors il n'y a pas de problèmes. Cependant, les choses sont différentes sur les classes existantes. Par exemple, un seul NSString (Privé) catégorie peuvent exister dans une donnée Objective-C de l'espace de noms. Cela peut conduire à des problèmes en raison de l'Objective-C de l'espace de noms est partagé entre le code du programme et toutes les bibliothèques,les cadres et les plugins.Ceci est particulièrement important pour Objective-C les programmeurs qui écrivent des économiseurs d'écran,les panneaux de préférences, et d'autres modules, car leur code sera injecté dans l'application ou le code de la structure qu'ils ne contrôlent pas.