自己做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