2010-02-08 3 views
4

J'essaie de faire en sorte qu'un dictionnaire stocke une carte de délégués correspondant à un protocole. J'ai besoin d'une clé cohérente qui représente un protocole.Comment obtenir un identifiant unique pour un objet de protocole

Par exemple, le suivant me donne un objet de protocole

Protocol * one = @protocol(SomeProtocolDefinedEarlier); 

Et il répond à [one hash] mais le hachage est pas la même chaque fois que vous obtenez un objet de protocole pour le même protocole. Y at-il un message name ou quelque chose que je peux utiliser pour l'identifier?

+0

woah, il ressemble 'name' est en fait quelque chose de retour cohérent. Est-ce un c-string? pourquoi ne puis-je pas trouver les documents sur l'objet de protocole? –

+0

La source d'exécution Objective-C est disponible et vous pouvez rechercher la définition de 'Protocol *'. Mieux vaut utiliser les fonctions Foundation (par exemple NSStringFromProtocol), selon la réponse de Dave DeLong. –

Répondre

4

Eh bien, les protocoles doivent avoir des noms uniques (sinon ils seraient en conflit les uns avec les autres), alors que diriez-vous:

Protocol * aProtocol = ... 
NSString * protocolIdentifier = NSStringFromProtocol(aProtocol); 
+0

Exactement ce que je cherchais. Comment trouve-t-on ce genre de chose dans les docs? –

+0

Pendant que je vous ai ici, quel est le meilleur moyen d'obtenir une clé pour un objet aléatoire (instance?) Je peux demander [obj hash] et le transformer en chaîne, mais je pense que j'ai lu que c'était une mauvaise idée. Y a-t-il quelque chose d'aussi cool pour les objets? –

+0

@Sean - Ils sont dans la référence des fonctions de base: http://developer.apple.com/mac/library/documentation/cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html Identique à l'identification d'une instance , vous pouvez soit utiliser le hachage ou l'adresse de l'objet. –

Questions connexes