Ada*_*rch 1 reflection objective-c
我知道protocol_copyMethodDescriptionList在Objective-C运行时中有定义,但我不想这么深,或者使用c-arrays.Protocol对象可以做任何方法吗?我在哪里可以找到该Protocol对象的任何文档?我希望有类似的东西:
[foo getMethodsThisProtocolDefines];
其中foo是一个Protocol.
Protocol自Leopard/ObjC 2.0以来,该类已被弃用.*因此,没有任何方法,也没有任何当前文档.与协议交互的唯一方法是通过运行时函数.
协议方法列表中包含的结构也不是对象,因此NSArray无论如何它们都无法进入.
处理从中返回的数组并不是特别困难protocol_copyMethodDescriptionList(); 你只需要记住free()它.如果您有一个特定的选择器,您还可以使用检查协议,您protocol_getMethodDescription()不需要任何内存管理.例如:
BOOL method_description_isNULL(struct objc_method_description desc)
{
return (desc.types == NULL) && (desc.name == NULL);
}
const char * procure_encoding_string_for_selector_from_protocol(SEL sel, Protocol * protocol)
{
static BOOL isReqVals[4] = {NO, NO, YES, YES};
static BOOL isInstanceVals[4] = {NO, YES, NO, YES};
struct objc_method_description desc = {NULL, NULL};
for( int i = 0; i < 4; i++ ){
desc = protocol_getMethodDescription(protocol,
sel,
isReqVals[i],
isInstanceVals[i]);
if( !method_description_isNULL(desc) ){
break;
}
}
return desc.types;
}
Run Code Online (Sandbox Code Playgroud)
*实际上,似乎(基于运行时引用中的注释)该名称现在只是一个别名Class.
| 归档时间: |
|
| 查看次数: |
1864 次 |
| 最近记录: |