Objective c 具有块参数的方法的ObjC方法类型编码字符串

Objective c 具有块参数的方法的ObjC方法类型编码字符串,objective-c,objective-c-runtime,method-signature,Objective C,Objective C Runtime,Method Signature,我在看书 苹果的,但我不明白如何编码一个块参数的方法 例如,我有: - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler 我不明白如何使用(void(^)()completionHan

我在看书 苹果的,但我不明白如何编码一个块参数的方法

例如,我有:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler 

我不明白如何使用
(void(^)()completionHandler

所有对象类型都是
@
。因此,我希望如此,因为块是Objective-C中的对象


但是,如果有疑问,可以使用
方法\u getTypeEncoding()

询问运行时本身,使用
@encode
指令:

typedef void(^CompletionHandler)(void);

char *encoded = @encode(CompletionHandler);
NSLog(@"Encoded: %s", encoded);
打印
@?

要引用您的文档链接:

@对象(无论是静态类型还是类型id)
? 未知类型(除其他外,此代码用于函数指针)


也许这会有帮助你到底想做什么?根据上下文的不同,答案会有所不同。
@encode()
发出的编码与编译器对方法发出的编码不同。这也许不能回答OP的问题。@bbum真的吗?我还尝试了
方法\u getTypeEncoding()
,得到了相同的结果。
@encode
不包括(现在是假的)堆栈偏移量。