【问题标题】:ObjC method type encoding string for a method with a Block parameter带有 Block 参数的方法的 ObjC 方法类型编码字符串
【发布时间】:2017-04-29 13:18:45
【问题描述】:

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

例如,我有这个:

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

我不明白(void(^)())completionHandler 的用途是什么

【问题讨论】:

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


【解决方案1】:

所有对象类型都是@。因此我会期待这一点,因为块是 Objective-C 中的对象。

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

【讨论】:

    【解决方案2】:

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

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

    打印@?

    引用您的文档链接:

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

    【讨论】:

    • @encode() 发出的编码与编译器对方法的编码不同。这可能无法回答 OP 的问题。
    • @bbum 真的吗?我也试过method_getTypeEncoding(),得到了同样的结果。
    • @encode 不包括(现在是虚假的)堆栈偏移量。
    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多