struct bucket_t { private: // IMP-first is better for arm64e ptrauth and no worse for arm64. // SEL-first is better for armv7* and i386 and x86_64. #if __arm64__ MethodCacheIMP _imp; cache_key_t _key; #else // unsigned long 的指针,其实是一个被 hash 化的一串数值,就是方法的 sel cache_key_t _key; // 保存着对应的函数地址 MethodCacheIMP _imp; #endif
// class or superclass has .cxx_construct implementation // 第 18 位的值是否为 1,以此表示该类或者父类是否有 .cxx_construct 函数实现 #define RW_HAS_CXX_CTOR (1<<18) // class or superclass has .cxx_destruct implementation // 第17位的值是否为 1 一次来表示类或者父类有 .cxx_destruct 函数实现。 #define RW_HAS_CXX_DTOR (1<<17)
// class or superclass has default alloc/allocWithZone: implementation // Note this is is stored in the metaclass. // 第 16 位的值是否为 1,以此表示该类或者父类是否有 alloc/allocWithZone 函数的默认实现 #define RW_HAS_DEFAULT_AWZ (1<<16) // class's instances requires raw isa // 第 15 位的值是否为 1,以此表示类实例对象(此处是指类对象,不是使用类构建的实例对象,一定要记得)是否需要原始的 isa。 #if SUPPORT_NONPOINTER_ISA #define RW_REQUIRES_RAW_ISA (1<<15) #endif
// class or superclass has default retain/release/autorelease/retainCount/ // _tryRetain/_isDeallocating/retainWeakReference/allowsWeakReference // 第 14 位的值是否为 1,以此表示该类或者父类是否有如下函数的默认实现 #define RW_HAS_DEFAULT_RR (1<<14)
// class is a Swift class from the pre-stable Swift ABI // class 是来自稳定的 Swift ABI 的 Swift 类。(遗留的类) #define FAST_IS_SWIFT_LEGACY (1UL<<0)
// class is a Swift class from the stable Swift ABI // class 是一个有稳定的 Swift ABI 的 Swift类。 #define FAST_IS_SWIFT_STABLE (1UL<<1) // data pointer // 一个定义好的掩码 二进制第 3-46 位是 1,其他位都是 0 #define FAST_DATA_MASK 0xfffffffcUL