我正在尝试在协议(protocol)方法中获取 block 的签名。
这是一个示例协议(protocol):
@protocol ProtocolSample <NSObject>
- (void) doSomething: (void (^) (NSString *))a_block;
@end
我可以使用以下命令获取 doSomething
的签名:
Protocol *protocol_sample = @protocol(ProtocolSample);
unsigned int outCount;
struct objc_method_description *method_description_list = protocol_copyMethodDescriptionList(protocol_sample, YES, YES, &outCount);
struct objc_method_description method_description = method_description_list[0];
NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:method_description.types];
我得到的签名是:v@:@?
我的目标是获得a_block
的签名。我尝试了很多方法,包括以下:
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
void *block;
[invocation getArgument:&block atIndex:2];
但是block
始终为NULL
。
如何获得a_block
的签名?
最佳答案
终于找到答案了:const char *_protocol_getMethodTypeEncoding(Protocol *, SEL, BOOL isRequiredMethod, BOOL isInstanceMethod);
该方法将为您提供任何选择器的完整签名!
关于c - 获取协议(protocol)中方法 block 的 NSMethodSignature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775394/