RunTime即運行時。就是程序在運行的時候的一些機制,其中最主要的是消息機制。對于C語言,函數的調用在編譯的時候會決定調用哪個函數。編譯完成之后直接順序執行。而OC的函數調用基于消息發送,屬于動態調用,在編譯的時候并不能決定真正調用哪個函數(事實證明:在編 譯階段,OC可以調用任何函數,即使這個函數并未實現,只要聲明過就不會報錯。而C語言在編譯階段就會報錯)。只有在真正運行的時候才會根據函數的名稱找 到對應的函數來調用。
Runtime的強大在于它能夠在程序運行時獲取并修改類的各種信息,包括獲取某個類的方法列表、屬性列表、變量列表,為某個類動態添加方法、屬性,修改某個類的方法屬性等等;
OC有一個Runtime的運行時庫(Runtime Library),其中包含很多C語言函數,我們可以通過這些函數來動態對某個類(包括自定義類和系統類)進行動態操作;一些常用函數: 1.Method class_getInstanceMethod(Class cls, SEL name) 獲取類中方法聲明的指針 2.IMP class_getMethodImplementation(Class cls, SEL name) 獲取類中方法實現的指針 3.IMP class_replaceMethod(Class cls, SEL name, IMP imp,const char *types) 替換類中某個方法的實現函數 4.void method_exchangeImplementations(Method m1, Method m2) 交換兩個方法的實現函數 5.BOOL class_addMethod(Class cls, SEL name, IMP imp,const char *types) 為某個類動態添加一個方法 6.void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) 為某個對象設置關聯值 7.id objc_getAssociatedObject(id object, const void *key) 獲得某個對象的關聯值
新建一個簡單的Car類,為它添加兩個對象方法:run方法和stop方法。 Car.h 
Car.m 
ViewController的ViewDidLoad方法中,為Car類動態添加一個clean方法
Log
Car類中的run方法和stop方法的實現
Log
Car類中的run方法的實現為ViewController中clean方法的實現
Log
新聞熱點
疑難解答