OC運行機制是指,可以運行的時候動態調用函數。因為C語言必須在編譯的時候就決定調用哪個函數。
我們平時寫的OC代碼,它在運行的時候也是轉換成了runtime的方式運行的。任何方法調用本質:就是發送一個消息。(用runtime發送消息,OC底層通過runtime實現)每一個OC的方法,底層必然有一個與之對應的runtime運行方法。也就是說任何方法調用,都是轉換為消息機制。
面試題:說說IOS 消息機制方法調用的過程:
1.OC在向一個對象發送消息時,runtime庫會根據對象的isa指針來找到這個對象對應的類,或者父類中查找對應的方法。
2.注冊方法編號(用編號的好處就是可以快速的查找)。
3.根據方法編號去查找對應的方法。
4.找到最終實現函數的地址,根據地址去方法區去調用對應的函數。
那么,一個OC對象的isa指針指向什么?有什么作用?
每個對象的內部都有一個isa指針,這個指針是指向他的真實類型。根據這個類的指針就能知道將來調用哪個類的方法。
總結:
1.每一個類本質上都是一個類的實例。其中類定義了成員變量和成員方法的列表。對象通過isa指針指向所屬的類。
2.每一個類本質上都是一個對象。類其實是元類(meteClas)的實例。元類定義了類方法的列表。類通過類isa指針指向元類。
3.元類保存了類方法的列表。當類方法被調用的時候,會先從本身查找類方法的實現,如果沒有找到,元類會向其父類查找該方法。需要注意的是,元類也是類,也是一個對象。
4.元類通過其isa指針指向他的根元類。(root meteClass)
5.根元類的isa指針指向了他本身。這樣行程了一個封閉的內循環。