Ios 为什么MethodList是objc_类中指针的指针

Ios 为什么MethodList是objc_类中指针的指针,ios,objective-c,objective-c-runtime,Ios,Objective C,Objective C Runtime,方法列表和协议都是链表, 协议是指针,但方法列表是指向指针的指针,为什么 这是一个实现细节,它是Objective-C的历史和向类动态添加方法的能力所带来的影响 具体来说,如果查看method_列表项的内容,您会发现这些方法被分成多个集合,其中每个集合包含对象上特定类别的所有方法。也就是说,如果你的应用程序要在UIView上用五种方法定义一个类别(不要这样做——糟糕的设计),那么你会在一个objc_方法_列表中发现这五种方法被固定在方法_列表的末尾(这就是为什么方法_列表条目是指针对齐和可变大

方法列表和协议都是链表, 协议是指针,但方法列表是指向指针的指针,为什么


这是一个实现细节,它是Objective-C的历史和向类动态添加方法的能力所带来的影响

具体来说,如果查看method_列表项的内容,您会发现这些方法被分成多个集合,其中每个集合包含对象上特定类别的所有方法。也就是说,如果你的应用程序要在UIView上用五种方法定义一个类别(不要这样做——糟糕的设计),那么你会在一个objc_方法_列表中发现这五种方法被固定在方法_列表的末尾(这就是为什么方法_列表条目是指针对齐和可变大小的)

这也扩展到方法的动态添加。无需将一组数据复制到现有方法数据结构的新分配副本中。相反,运行时可以只分配一个objc_方法_列表,并将其推到链表的末尾(或在头部——实现细节)