【问题标题】:What's a class handler callback in Objective-C runtime?Objective-C 运行时中的类处理程序回调是什么?
【发布时间】:2019-09-14 10:11:15
【问题描述】:

什么是 Objective-C 运行时中的类处理程序回调?根据文档,

objc_getClass 与 objc_lookUpClass 的不同之处在于,如果该类未注册,则 objc_getClass 调用类处理程序回调,然后再次检查该类是否已注册。 objc_lookUpClass 不调用类处理程序回调。

【问题讨论】:

    标签: objective-c objective-c-runtime


    【解决方案1】:

    它似乎是运行时的一个过时功能。在 /usr/include/objc/runtime.h 中,您可以在标记为 /* Obsolete functions */ 的部分中找到以下声明:

    OBJC_EXPORT void objc_setClassHandler(int (*)(const char *)) OBJC2_UNAVAILABLE;
    

    因此,显然,在 Objective-C 2.0 之前,可以注册一个函数指针来充当类处理程序。我猜参数是类名。它将有机会加载或动态创建命名类。

    【讨论】:

    • 在 PyObjC 中,我使用了这种机制来允许 Python 类在首次引用时在 ObjC 运行时中动态实现。它奏效了,但事实证明有更简单的方法可以做到这一点。最终,这种方式的惰性初始化并没有那么有价值,这就是它被弃用的原因。
    猜你喜欢
    • 2012-01-13
    • 2017-07-27
    • 2014-09-20
    • 2011-10-10
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多