作为一名程序员,我知道如何使用类别,但我很好奇它们是如何实现的。编译器是否将它们编译为对类替换方法 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/c/func/class_replaceMethod来自静态初始化程序?谢谢。
关于主题的新答案。
每个类都有一个方法列表,在进行方法查找时,会从头到尾扫描方法列表。如果没有找到方法,则扫描超类列表等,直到到达根类。找到的方法会被缓存,以便下次更快地查找。
将类别加载到类时,类别方法列表是前置的到现有列表,并且缓存被刷新。由于列表是按顺序搜索的,这意味着将找到类别方法before下次搜索时使用原始方法。
当首次访问该类时,类别的设置是从静态数据延迟完成的。如果加载带有可执行代码的包,则可以重新完成。
简而言之,它的级别比class_replaceMethod()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)