2010-02-20 3 views
4

Les catégories Objective-C sont extrêmement utiles, mais cette alimentation présente des problèmes. Ceux-ci viennent essentiellement sous deux formes que je connais:Dans quelle mesure les catégories Objective-C sont-elles sécurisées?

  • Deux catégories essayant d'ajouter la même méthode de commodité. Dans ce cas, il est indéfini lequel est utilisé. Si vous faites attention - sans ajouter trop de méthodes ou en utilisant des noms de méthodes particulièrement communs - le premier problème ne devrait presque jamais poser problème.
  • Nouvelles méthodes ajoutées à une classe par un rédacteur qui s'affrontent avec une catégorie. Dans ce cas, la catégorie remplace la méthode de classe. Puisque la classe ne peut pas être sous mon contrôle, je suis plus préoccupé par ce problème.

Les modifications de rétroportage devraient être relativement sûres, mais la mise en œuvre d'interfaces ou l'ajout de méthodes pratiques semble plus dangereux. Je sais que Cocoa semble l'utiliser beaucoup pour les méthodes de commodité, mais là encore la classe de base est sous contrôle. Je pense que peut-être ils utilisent simplement les catégories pour réduire les dépendances - donc une classe String peut avoir des méthodes pratiques pour travailler dans Cocoa, mais si vous n'utilisez pas Cocoa, elle n'est pas tirée.

sont des catégories/quelles sont les lignes directrices pour assurer leur sécurité?

Répondre

6

Généralement, lorsque vous étendez du code qui n'est pas sous votre contrôle (par exemple, Foundation), il est classique d'utiliser un préfixe ou un suffixe sur le nom de la méthode pour éviter ce type de collision.

Exemple de Peter Hosey's perform on main thread category:

@interface NSObject (PRHPerformOnMainThread) 
- (id) performOnMainThread_PRH; 
@end 

Ce n'est pas la plus belle solution, mais si vous êtes inquiet au sujet de fragilité, il est une bonne idée.

+1

Je suppose que cela résout la plupart des problèmes – Casebash

4

J'ai trouvé le Google Objective-C Style Guide utile et il comprend une convention pour aider à éviter les collisions que vous mentionnez.

+0

J'ai vu des références à plusieurs reprises, mais je n'ai pas encore tout lu. Je pense que je devrais. – Casebash

Questions connexes