我试图让字典存储与协议对应的委托的映射。我需要一些代表协议的一致性密钥。如何获得协议对象的唯一标识符
例如下面给我一个协议对象
Protocol * one = @protocol(SomeProtocolDefinedEarlier);
及其响应[one hash]
但每次你得到同样的协议的协议对象时哈希是不一样的。是否有一些name
消息或我可以用来识别它?
我试图让字典存储与协议对应的委托的映射。我需要一些代表协议的一致性密钥。如何获得协议对象的唯一标识符
例如下面给我一个协议对象
Protocol * one = @protocol(SomeProtocolDefinedEarlier);
及其响应[one hash]
但每次你得到同样的协议的协议对象时哈希是不一样的。是否有一些name
消息或我可以用来识别它?
好了,协议必须具有唯一的名称(否则他们会互相冲突),所以怎么样:
Protocol * aProtocol = ...
NSString * protocolIdentifier = NSStringFromProtocol(aProtocol);
正是我在找的东西。人们如何在文档中找到这样的事情? – 2010-02-08 19:22:25
虽然我有你在这里,什么是获得一个随机对象的关键(实例?)的最佳方法是什么?我可以要求[obj哈希]并将其变成字符串,但我想我读了这是一个坏主意。对象有没有同样酷的东西? – 2010-02-08 19:24:40
@Sean - 他们在基础函数参考:http://developer.apple.com/mac/library/documentation/cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html至于唯一标识一个实例,您可以使用哈希或对象的地址。 – 2010-02-08 19:29:05
哇,它看起来像'name'实际上是返回的东西是一致的。它是一个C字符串吗?为什么我无法找到协议对象上的文档? – 2010-02-08 19:20:07
Objective-C运行时源可用,您可以查找“Protocol *”的定义。根据Dave DeLong的回答,最好使用基础函数(例如NSStringFromProtocol)。 – 2010-02-08 22:41:51