Vad*_*ick 7 internals objective-c categories
我知道如何使用类别作为程序员,但我很好奇它们是如何实现的.编译器是否将它们编译为从静态初始化程序调用class_replaceMethod?谢谢.
关于主题的新答案.
每个类都有一个方法列表,在进行方法查找时,从头到尾扫描方法列表.如果没有找到方法,则扫描超类列表等,直到到达根类.缓存找到的方法以便下次更快地查找.
将类别加载到类时,类别方法列表将添加到现有列表中,并刷新高速缓存.由于按顺序搜索列表,这意味着将在下一次搜索的原始方法之前找到categories方法.
当首次访问类时,这种类别设置是从静态数据延迟完成的.如果使用可执行代码加载包,则可以重新完成.
简而言之,它的水平要低一些class_replaceMethod().
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |