關于Runtime中的動態(tài)添加方法以及實現消息的轉發(fā)

自己做iOS開發(fā)2年,第一次發(fā)表博客。

1、runtime實現為類動態(tài)添加方法

首先為了編譯通過使用performSelector來調用car類中的run:方法

然而run:方法在car類中并沒有實現,這時運行Xcode會crash,怎么辦呢!runtime來大顯身手了,為car動態(tài)添加方法并實現

首先car類包含<runtime.h>

如果car類沒有實現run:方法那么將調用car的類方法+(void)resolveInstanceMethod:方法來覆蓋這個方法

if(一致)用class_addMethod這個c語言函數創(chuàng)建一個方法,第一個參數就是你要添加方法的那個類的car類對象,第二個參數就是傳遞過來的sel,第三個是一個函數名,第四個參數是上一個參數--函數的參數要數,第一個v代表這個函數的返回值為void,如果返回對象類型就是@,后面的@:@分別代表后續(xù)的三個參數,其中Sel類型的用:表示,具體請參考蘋果開發(fā)文檔。

到此runtime為類動態(tài)添加方法完成

2、消息的轉發(fā)

假如我把class_addMethod注釋掉,運行Xcode立馬crash,這里就用到了消息轉發(fā),新建一cat個類在該類里面實現run:()

然后回到car類.m文件中

實現兩個方法

這時在運行Xcode 不會crash 然后再cat類中的run:()方法中打印 ?輸出結果 ?這樣就把消息抓發(fā)出去了,到此結束個人在網上面學習的,若遇到相同的 純屬巧合,后面我會繼續(xù)學習 方法交換 ?屬性添加 ?以及更深層的runtime

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容