1、基本概念函數
一、runtime簡稱運行時,就是系統運行時的一些機制,其中最主要的是消息機制。指針
二、對於C語言,函數的調用在編譯的時候已經決定了,編譯完成後直接按順序執行。對象
三、對於OC函數的調用就是發送消息。屬於動態調用,編譯的時候並不能決定調用哪一個函數,只有在真正運行時纔會根據函數名來調用此函數。get
2、列子cmd
1.OC代碼調用一個方法io
2.在編譯時RunTime會將上述代碼轉化成[發送消息]編譯
objc_msgSend(self.xiaoming,@selector(answer));class
3、常見做用變量
1. 動態的添加對象的成員變量和方法select
(1.1)動態添加方法
class_addMethod([xiaoMing class], @selector(guess), (IMP)guessAnswer, "v@:");
IMP)guessAnswer 意思是guessAnswer的地址指針;
"v@:" 意思是,v表明無返回值void,若是是i則表明int;@表明 id sel; : 表明 SEL _cmd;
「v@:@@」 意思是,兩個參數的沒有返回值。
2. 動態交換兩個方法的實現
Method m1 = class_getInstanceMethod([xiaoMing class], @selector(firstSay));
Method m2 = class_getInstanceMethod([xiaoMing class], @selector(secondSay));
method_exchangeImplementations(m1, m2);
3. 實現分類也能夠添加屬性
4. 實現NSCoding的自動歸檔和解檔
5. 實現字典轉模型的自動轉換