Object c反射機制

2021-07-11 20:18:53 字數 1212 閱讀 9505

object——c提供了三種方式實現與執行環境的互動

直接使用object-c的源**實現。這是最常見的方式,開發者只需要編寫object-c的源**,執行環境負責在後台工作,當編譯時,編譯器會建立大量資料結構和實現動態機制的函式,其中資料結構負責儲存類、類別和等一的資料,函式負責資料處理的呼叫

通過nsobject類中定義的方法進行動態程式設計,因此絕大部分的分類都是nsobject的子類,故所有的物件都可以直接呼叫nsobject的方法進行程式設計,在少數情況下,nsobject類只提供了方法模板,並沒有為方法的實現提供**。

直接呼叫執行時函式進行動態程式設計,執行時系統是乙個動態共享庫,其由一系列位於/user/include/objc目錄的標頭檔案中的函式和資料結構組成。

獲取class

每個類都對應乙個class,該class的獲取方式如下:

使用classnsclassfromstring(nsstring* aclassname)函式來獲取class,該函式需要傳入字串引數,該字串的引數是某個類的類名。

呼叫某個類的class方法來獲取當前的class,比如[user class];

呼叫某個物件的 class方法來獲取,該方法時nsobject中例項方法,所有的nsobject物件都可以呼叫該方法。

例項-------

class clazz=nsclassfromstring(@"nsdate");

該class對應nsdate,該clazz==nsdate.class;

id date=[[clazz alloc] init];

該date對應當前的事件2016-05-16 09:14:11 +0000

該[date class]輸出為—  _nsdate

通過類名字串、類本身回去的class物件時對等的,但是通過nsdate物件獲取的class則是_nsdate。造成這樣問題的原因是:objective-c很多設計都採用類簇的設計,nsdate只是該類簇的字首,當程式呼叫[[nsdate] alloc]init]建立物件時,程式事件返回的是nsdate的子類_nsdate的例項而不是nsdate的例項,因此,程式直接呼叫date物件的class方法來獲取class時獲取到的是_nsdate;

一旦獲得到某個類對應的class後,程式可以直接呼叫該class的alloc方法來建立物件,後呼叫init方法執行初始化即可,從程式的執行結果可以看到,呼叫class的alloc方法建立的並不是class的例項,而是該class對應的類的例項。

C 反射機制

反射的概述 反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 syste...

C 反射機制

反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 system.refl...

反射(Reflection)機制

反射 reflection 是.net中的重要機制,通過放射,可以在執行時獲得.net中每乙個型別 包括類 結構 委託 介面和列舉等 的成員,包括方法 屬性 事件,以及建構函式等。還可以獲得每個成員的名稱 限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物件...