- 当你给对象发送消息时,消息是在寻找这个对象的类的方法列表。
- 当你给类发消息时,消息是在寻找这个类的元类的方法列表。
- 元类是必不可少的,因为它存储了类的类方法。每个类都必须有独一无二的元类。
- 所有的元类都使用根元类(继承体系中处于顶端的类的元类)作为他们的类。
- 这就意味着所有NSObject的子类(大多数类)的元类都会以NSObject的元类作为他们的类
isa指针
- 实例对象的isa --> 类
- 类的isa指针 --> 元类
- 元类的isa指针 -->根元类
- 根类的isa指针 -->根元类
- 根元类的isa指针 --> 根元类自己
superclass指针
- 实例对象 --> 无superclass
- 类的superclass指针 --> 父类
- 根类superclass指针 --> nil
- 元类superclass指针 --> 元类的基类的父类的元类
- 根元类superclass指针 --> 根元类的基类
Greg Parker给出了一份精彩的元类,类,实例对象图谱来展示这些关系
详解 Objective-C 中的 Runtime
深入Objective-C的动态特性
初学 Objective-C 时把[receiver message]当成简单的方法调用,而无视了“发送消息”这句话的深刻含义。其实[receiver message]会被编译器转化为:
objc_msgSend(receiver, selector)
如果消息含有参数,则为:
objc_msgSend(receiver, selector, arg1, arg2, ...)