我正在尝试为NSMethodSignature
协议中声明的方法获取签名——对象或至少类型编码字符串。
询问Protocol
对象本身是不可能的,因为 a) 它没有实现methodSignatureForSelector:
,并且 b)(如下面的 Kevin 所指出的)它已被弃用。
运行时函数protocol_getMethodDescription
返回 a struct objc_method_description
,文档中的任何地方都没有描述。不过,它位于公共标头中—— <objc/runtime.h>:
struct objc_method_description {
SEL name;
char *types;
};
假设其中的types
字符串将与其他地方使用的签名编码字符串相同,这似乎是合理的,例如 预期的+[NSMethodSignature signatureWithObjCTypes:]
,实际上,它看起来是正确的。
我无法追踪的是该字符串与类型编码过程之间的实际、可验证的连接。
我想不出它还会是什么,但是,我有任何理由依赖这个types
字符串来有效地与同一运行时上的其他对象/函数进行交互吗?请注意,我不是自己编写编码字符串,也不是期望它们具有给定的格式或值——我只想将它们从运行时/框架的一部分传递到另一部分,即从协议中检索编码字符串和)NSMethodSignature
如果一个对象不可用,则使用它来生成一个对象,并且可能 b) 将它与运行时生成的对象NSInvocation
(即 in -forwardInvocation:
)进行比较。