iOS開發-方法調用在運行時的過程

方法調用在運行時的過程html

若是用實例對象調用實例方法,會到實例的isa指針指向的對象(也就是類對象)操做。ios

若是調用的是類方法,就會到類對象的isa指針指向的對象(也就是元類對象)中操做。緩存

  1. 首先,在相應操做的對象中的緩存方法列表中找調用的方法,若是找到,轉向相應實現並執行。指針

  2. 若是沒找到,在相應操做的對象中的方法列表中找調用的方法,若是找到,轉向相應實現執行htm

  3. 若是沒找到,去父類指針所指向的對象中執行1,2.對象

  4. 以此類推,若是一直到根類還沒找到,轉向攔截調用。編譯器

  5. 若是沒有重寫攔截調用的方法,程序報錯。io

以上的過程給我帶來的啓發:編譯

  • 重寫父類的方法,並無覆蓋掉父類的方法,只是在當前類對象中找到了這個方法後就不會再去父類中找了。class

  • 若是想調用已經重寫過的方法的父類的實現,只需使用super這個編譯器標識,它會在運行時跳過在當前的類對象中尋找方法的過程。

來源:http://www.cocoachina.com/ios/20150901/13173.html

相關文章
相關標籤/搜索