- IOS中的SEL和IMP
SEL:類成員方法的指針,但是不同於C語言的函數指針,函數指針世界保存了方法的地址,但是SEL保存的只是方法的編號。
IMP 一個函數的指針,保存了方法的地址;
每一個繼承於NSobject的類都能自動獲得runtime的支持,在這樣的類中,有一個isa指針,只想該類定義的數據結構體,這個結構體是編譯器編譯時爲類創建的,這個結構體中包括了指向父類定義的指針以及Dispatch table,dispatch table是一張SEL和IMP對應的表,SEL方法編號需要通過dispatch table找到對應的IMP,指針函數,拿到函數對應的地址,然後開始調用;
有了SEL這個中間過程,可以對一個編號和什麼方法映射做些操作,當函數的名稱相同,但是在不同的情況下,或者不同的類中所對應的IMP是不相同的,這個使用SEL就起作用了。