具有Block参数的方法的ObjC方法类型编码字符串

时间:2017-04-29 13:18:46

标签: objective-c objective-c-runtime method-signature

我正在读书 Apple的article about Objective-C runtime type encoding strings但我不明白如何使用Block参数对方法进行编码。

例如,我有这个:

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

我不明白(void(^)())completionHandler

的用途

2 个答案:

答案 0 :(得分:1)

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

但是,您可以使用method_getTypeEncoding()来询问运行时本身。

答案 1 :(得分:1)

如有疑问,请使用@encode指令:

typedef void(^CompletionHandler)(void);

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

打印@?

引用您的文档链接:

  

@一个对象(无论是静态类型还是键入的id)
  ?未知类型(除此之外,此代码用于函数指针)