Получить NSMethodSignature блока метода в протоколе - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь получить подпись блока в методе протокола.

Вот пример протокола:

@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?

1 Ответ

0 голосов
/ 20 февраля 2019

Наконец-то нашел ответ: const char *_protocol_getMethodTypeEncoding(Protocol *, SEL, BOOL isRequiredMethod, BOOL isInstanceMethod);

Метод получит полную подпись любого селектора!

...