【发布时间】:2020-06-16 11:56:55
【问题描述】:
我的困惑是编译器如何编译这两个同名结构。
对开发者开放的“objc/runtime.h”中的objc_class定义
struct objc_class {
Class _Nonnull isa OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
Class _Nullable super_class OBJC2_UNAVAILABLE;
const char * _Nonnull name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list * _Nullable ivars OBJC2_UNAVAILABLE;
struct objc_method_list * _Nullable * _Nullable methodLists OBJC2_UNAVAILABLE;
struct objc_cache * _Nonnull cache OBJC2_UNAVAILABLE;
struct objc_protocol_list * _Nullable protocols OBJC2_UNAVAILABLE;
#endif
} OBJC2_UNAVAILABLE;
/* Use `Class` instead of `struct objc_class *` */
但是项目头文件“objc-runtime-new.h”有不同的定义(成员变量和函数)。
struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable
// class_data_bits_t
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() {
return bits.data();
}
void setData(class_rw_t *newData) {
bits.setData(newData);
}
…
…
};
我不明白这两个结构是如何转换的。
【问题讨论】:
-
我不确定是否有人能在不读懂你的想法的情况下回答这个问题。假设我们对此问题一无所知,您能否详细说明一下?
-
@SteveFriedl 我添加一些描述。上面的代码是Apple开源代码,我不知道同一个项目中的同名结构具有不同的结构。
标签: objective-c runtime