方法調用在運行時的過程html
若是用實例對象調用實例方法,會到實例的isa指針指向的對象(也就是類對象)操做。ios
若是調用的是類方法,就會到類對象的isa指針指向的對象(也就是元類對象)中操做。緩存
首先,在相應操做的對象中的緩存方法列表中找調用的方法,若是找到,轉向相應實現並執行。指針
若是沒找到,在相應操做的對象中的方法列表中找調用的方法,若是找到,轉向相應實現執行htm
若是沒找到,去父類指針所指向的對象中執行1,2.對象
以此類推,若是一直到根類還沒找到,轉向攔截調用。編譯器
若是沒有重寫攔截調用的方法,程序報錯。io
以上的過程給我帶來的啓發:編譯
重寫父類的方法,並無覆蓋掉父類的方法,只是在當前類對象中找到了這個方法後就不會再去父類中找了。class
若是想調用已經重寫過的方法的父類的實現,只需使用super這個編譯器標識,它會在運行時跳過在當前的類對象中尋找方法的過程。
來源:http://www.cocoachina.com/ios/20150901/13173.html