2010-02-08 65 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