寫在前面:剛接觸iOS開發時,runtime我們聽得很多,感覺很高大上,卻又說不出個所以然,今天,我把我自己知道的分享給大家。
首先,說OC是運行時機制,那肯定是有一個比較對象。我們拿C語言和OC作對比。C語言寫的代碼,在編譯的時候就已經決定了某一段代碼在運行時就會調用某一個函數;而OC則不同,OC在編譯的時候只會檢查是否已經定義一個方法,沒有實現也不會報錯,但是,在運行時,執行某一個只定義未實現的方法就會崩潰。所以說OC是運行時機制。
OC中的方法調用:
任何方法調用本質都是發送一個消息,用runtime發送消息.OC底層就是通過runtime實現的。
方法調用的流程:
OC中的方法可分為類方法和對象方法,對象方法可以再類對象的方法列表中找到, 類方法可以在元類的方法列表中找到。而所有方法都存在于內存的方法區。在這里簡單說明一下:
內存的五大區:1.棧 2.堆 3.靜態區 4.常量區 5.方法區。
1.棧:不需要手動管理內存,自動管理
2.堆,需要手動管理內存,自己去釋放
其他三個憑字面意思理解,我也不是太懂。
方法調用流程:
1.通過isa去對應的類中查找(開發調式過程中,我們都會看到某一個對象的isa指針,就是通過isa指針找到對應的類)
2.注冊方法編號(給方法注冊編號后,既可以做統計又方便查找。就像我們每個人有自己的身份證號碼,學生有學號一樣)
3.根據方法編號去查找對應方法
4.找到只是最終函數實現地址,根據地址去方法區調用對應函數