gpt4 book ai didi

objective-c - 如何获得协议(protocol)定义的函数列表?

转载 作者:行者123 更新时间:2023-12-02 15:38:59 24 4
gpt4 key购买 nike

我知道在 Objective-C 运行时中定义了 protocol_copyMethodDescriptionList,但我不想深入研究或使用 c 数组。 Protocol 对象是否有任何方法可以做到这一点?在哪里可以找到有关 Protocol 对象的文档?我希望是这样的:

[foo getMethodsThisProtocolDefines];

其中 foo 是一个 Protocol

最佳答案

自 Leopard/ObjC 2.0 以来,Protocol 类已被弃用。*因此,它没有方法,也没有任何当前文档。与协议(protocol)交互的唯一方法是通过运行时函数。

协议(protocol)的方法列表中包含的结构也不是对象,因此它们无论如何都不能在不被包装的情况下进入 NSArray

处理从protocol_copyMethodDescriptionList() 返回的数组并不是特别费力;你只需要记住 free() 它。如果您有特定的选择器,您还可以使用 protocol_getMethodDescription() 检查协议(protocol),这不需要您进行任何内存管理。例如:

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;
}

*事实上,似乎(基于运行时引用中的 a note)该名称现在只是 Class 的别名。

关于objective-c - 如何获得协议(protocol)定义的函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11602627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com