我試圖獲取協議中聲明的方法的簽名 - 或者NSMethodSignature
對象或至少是類型編碼字符串。協議方法的類型編碼字符串
詢問Protocol
對象本身是不可能的,因爲a)它不實現methodSignatureForSelector:
,和b)(如Kevin所述),它已被棄用。
運行時功能protocol_getMethodDescription
返回struct objc_method_description
,這在文檔中的任何地方都沒有描述。這是在一個公共頭,雖然 - <objc/runtime.h>:
struct objc_method_description {
SEL name;
char *types;
};
似乎可以合理地假定types
串在那裏將是同一種簽名編碼字符串的其他地方使用,如由+[NSMethodSignature signatureWithObjCTypes:]
預期,實際上,它看起來正確。
我無法追查的是該字符串與類型編碼過程之間的實際可驗證連接。
我不認爲這會是些什麼,不過,我必須爲依託這個types
字符串有效,以便與其它物品/功能在同一個運行時互動任何理由?請注意,我不是自己編寫編碼字符串,或者期望它們具有給定的格式或值 - 我只想將它們從運行時/框架的一部分傳遞到另一部分,即從協議中檢索編碼字符串, )使用它來生成NSMethodSignature
對象,並且可能b)將其與運行時生成的NSInvocation
(即-forwardInvocation:
)中的對象進行比較。
對未來的注意:引發這個問題的一個主要誤解是,它是運行時正在執行方法簽名的原始構造,而實際上這是編譯器的工作。 – 2013-11-02 02:54:53