2010-02-08 67 views
4

我试图让字典存储与协议对应的委托的映射。我需要一些代表协议的一致性密钥。如何获得协议对象的唯一标识符

例如下面给我一个协议对象

Protocol * one = @protocol(SomeProtocolDefinedEarlier); 

及其响应[one hash]但每次你得到同样的协议的协议对象时哈希是不一样的。是否有一些name消息或我可以用来识别它?

+0

哇,它看起来像'name'实际上是返回的东西是一致的。它是一个C字符串吗?为什么我无法找到协议对象上的文档? – 2010-02-08 19:20:07

+0

Objective-C运行时源可用,您可以查找“Protocol *”的定义。根据Dave DeLong的回答,最好使用基础函数(例如NSStringFromProtocol)。 – 2010-02-08 22:41:51

回答

4

好了,协议必须具有唯一的名称(否则他们会互相冲突),所以怎么样:

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

正是我在找的东西。人们如何在文档中找到这样的事情? – 2010-02-08 19:22:25

+0

虽然我有你在这里,什么是获得一个随机对象的关键(实例?)的最佳方法是什么?我可以要求[obj哈希]并将其变成字符串,但我想我读了这是一个坏主意。对象有没有同样酷的东西? – 2010-02-08 19:24:40

+0

@Sean - 他们在基础函数参考:http://developer.apple.com/mac/library/documentation/cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html至于唯一标识一个实例,您可以使用哈希或对象的地址。 – 2010-02-08 19:29:05