【发布时间】:2012-01-09 20:50:47
【问题描述】:
我正在尝试为协议中声明的方法获取签名——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: 中)。
【问题讨论】:
-
对未来的注意:引发这个问题的一个主要误解是运行时执行方法签名的原始构造,而实际上这是编译器的工作。
标签: objective-c protocols objective-c-runtime method-signature