读过《Runtime的初步认识——结构体与类》的小伙伴们应该对objc_class结构体的构造有所了解了
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif
} OBJC2_UNAVAILABLE;
在这里,我们可以找到
实例变量struct objc_ivar_list *ivars
,
方法列表struct objc_method_list **methodLists
,
缓存方法列表struct objc_cache *cache
。
在这里插一嘴。我们之前在《Runtime的初步认识——消息机制》中介绍过,在Objective-C里面调用一个方法的时候,runtime层会将这个调用翻译成
objc_msgSend(id self, SEL op, ...)
而objc_msgSend
具体有事如何分发的呢?我们来看下runtime层objc_msgSend
的源码。(runtime的源代码可以在 http://opens