在每個類中都有一個Dispatch Table,這個Dispatch Table本質是將類中的SEL和IMP(可以理解為函數指針)進行對應。而我們的Method Swizzling就是對這個table進行了操作,讓SEL對應另一個IMP。
==================
對象如何找到對應的正確方法去調用:
對象方法保存在類中,類方法保存在元類中;
每一個類都有一個方法列表:method list;
(1) 明確去哪個類中調用方法;通過對象的isa指針,這個指針指向的就是這個實例對象的類對象;
(2) 根據傳入的方法編號,也就是SEL編號,去方法列表中查找到對應的方法;
為什么蘋果會使用方法編號?因為操作數字比操作字符串會快,那么傳遞方法的時候傳遞數字編號會提高效率;
(3) 根據方法編號找到了方法名(函數入口),然后根據這個方法名去內存中的方法區找到這個函數的實現!!!