RunTime的簡單使用

一、runtime簡介

1.RunTime簡稱運行時。OC就是運行時機制,也就是在運行時候的一些機制,其中最主要的是消息機制。

2.對于C語言,函數的調用在編譯的時候會決定調用哪個函數。

3.對于OC的函數,屬于動態調用過程,在編譯的時候并不能決定真正調用哪個函數,只有在真正運行的時候才會根據函數的名稱找到對應的函數來調用。

4.事實證明:

在編譯階段,OC可以調用任何函數,即使這個函數并未實現,只要聲明過就不會報錯。

在編譯階段,C語言調用未實現的函數就會報錯。

二、runtime的使用

測試類中的頭文件如下:

在需要實現的類中導入對應的頭文件?

#import? ? <objc/runtime.h> //? 導入運行時文件

1.得到類名和得到類中所有的成員變量和其對應的類型

用到的函數:

獲取對應的類名: ?const? char *class_getName(Class cls) ? ?cls:傳對應的類名,返回的是字符串(C語言中的字符串),后面轉為NSString即可

得到某個類中所有的成員變量:Ivar *class_copyIvarList(Class cls,unsigned? int*outCount) ? ?cls:傳對應的類名,outCount:成員變量的長度(int類型),返回所有的成員變量(Ivar類型)

得到某個成員變量的類型:? const char *ivar_getTypeEncoding(Ivar v) ? ? v:具體的成員變量,返回的是變量的類型(C語言中的字符串),后面轉為NSString即可

得到某個成員變量的名字 const char? *ivar_getName(Ivar v)? ? v:具體的成員變量,返回的是變量的名字(C語言中的字符串),后面轉為NSString即可

下面的一些用到的函數代碼就不做說明了,具體看截圖代碼的返回值

對應的結果如下:

2.得到類中所有的屬性

3.得到類中所有的方法

"calculateAllValue:needMoney:other:" 是我在 TestGetClassName.h 文件中聲明的方法: -(void)calculateAllValue:(NSString *)ageValue needMoney:(NSNumber *)moneyValue other:(NSNumber *)other;? 并且在 TestGetClassName.m 實現了這個方法的,當然了,你也可以在.m文件中直接實現,不需要聲明。

.cxx_destruct 方法是系統調用的方法,只有在ARC下這個方法才會出現,只有當前類擁有實例變量時(不論是不是用property)這個方法才會出現


4.得到類中遵守的所有協議

5.兩個方法相互交換

6.方法替換

7.給一個類添加方法

8.屬性關聯

用到的設置函數: ? void objc_setAssociatedObject(id object,const void*key,id value, objc_AssociationPolicy? policy)? ? ? object:源對象? key:關鍵字(唯一靜態變量) value:設置的值 policy:關聯策略(具體看其對應的枚舉)

用到的得到函數:? id? objc_getAssociatedObject(id object,const? void*key)? ? object:源對象? key:關鍵字(唯一靜態變量,和上面一一對應)

三、簡單的使用場景

1.是通過運行時,獲取屬性對應的成員變量,將對象對應的屬性以及值進行歸檔和解檔。其中藍色方框中的是之前原始的寫法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,768評論 0 9
  • 我們常常會聽說 Objective-C 是一門動態語言,那么這個「動態」表現在哪呢?我想最主要的表現就是 Obje...
    Ethan_Struggle閱讀 2,231評論 0 7
  • 原文出處:南峰子的技術博客 Objective-C語言是一門動態語言,它將很多靜態語言在編譯和鏈接時期做的事放到了...
    _燴面_閱讀 1,252評論 1 5
  • Objective-C語言是一門動態語言,他將很多靜態語言在編譯和鏈接時期做的事情放到了運行時來處理。這種動態語言...
    tigger丨閱讀 1,431評論 0 8
  • 心情很不好,我煩起來就是十二級大風,讓我靜心的,只有畫畫兒,我手殘,若辣了您的眼,抱歉。 好喜歡他呢,不過他有喜歡...
    忍者神鵝閱讀 276評論 2 2