任何資料結構,只要在恰當的位置具有乙個指標指向乙個class,那麼,它都可以被認為是乙個物件
在oc中,乙個物件所屬於哪個類,是由它的isa指標指向的。這個isa指標指向這個物件所屬的class
執行原理:
當向oc物件傳送訊息時,執行時庫會根據物件的isa指標找到這個物件所屬的類。這個類會包含乙個所有例項方法的列表及乙個指向superclass的指標以便可以找到父類的例項方法。執行時庫會在類的方法列表以及父類們的方法列表中尋找符合這個selector的方法。找到後即執行這個方法。關鍵點就是類要定義這個要傳送給物件的訊息
傳送訊息機制:
乙個oc的類其實也是乙個物件,就是可以向乙個類傳送訊息
因為每乙個oc的類本身也是乙個物件。也就是說class的資料結構必然也是以isa指標開始的在二進位制級別上與objc_object是完全相容的。然後乙個類結構的下乙個字段一定是乙個指向super class的指標(或者指向nil,對於基類來說)
乙個類如何定義有很多方法,依賴於你的執行時庫版本,但是無論怎樣,都是以乙個isa作為第乙個字段,接著是superclass欄位。
為了可以呼叫類方法,這個類的isa指標必須指向乙個包含這些類方法的類結構體:
meta-class是乙個類物件的類
當向乙個對傳送訊息時,runtime會在這個物件所屬的那個類的方法列表中查詢
當向乙個類傳送訊息時,runtime會在這個類的meta-class的方法列表中查詢
meta-class儲存著乙個類的所有類方法。每個類都會有乙個單獨的meta-class,因為每個類的類方法基本不可能完全相同的
meta-class
meta-class與class一樣,也是乙個物件,依舊可以向它傳送訊息呼叫函式,自然的,meta-class也會有乙個isa指標指向其所屬類。所有的基類的meta-class作為他們的所屬類。任何nsobject繼承體系下的meta-class都使用nsobject的meta-class作為自己所屬的類
所有的meta-class使用基類的meta-class作為它們的基類,而基類的meta-class也是屬於它自己,也就是基類的meta-class的isa指標指向自己。這是乙個完美的閉環
類和meta-class的繼承
與乙個類使用super_class指標指向自己的父類一樣,meta-class的super_class會指向類的super_class的meta-class。一直追溯到基類的meta-class,它的super_class會指向基類自身(萬物歸根)
整個繼承體系中的例項、類和meta-class都派生自繼承體系中的基類。對於nsobject繼承體系來說,nsobject的例項方法對體系中所有的例項、類和meta-class都是有效的。nsobject的類方法對於體系中所有的類和meta-class都是有效的
總結:meta-class是類物件的類,每個類都有自己單獨的meta-class。所有的類物件並不會屬於同乙個meta-class。
meta-class要保證類物件具有繼承體系中基類的所有例項和類方法,以及繼承體系中的所有中間類方法。對於所有nsobject繼承體系下的類,nsobject的例項方法和協議方法對它們和它們meta-class的物件都要有效
所有的meta-class使用基類的meta-class作為自己的基類,對於頂層基類的meta-class也是一樣,只是它指向本身而已
摘自:
OC 的反射機制
class 的反射 通過類名的字串形式例項化物件 class class nsclassfromstring student student stu class alloc init 將類名變成字串 class class student class string classname nsstrin...
windows訊息機制
一 windows中有乙個系統訊息佇列,對於每乙個正在執行的windows應用程式,系統為其建立乙個 訊息佇列 即應用程式佇列,用來存放該程式可能 建立的各種視窗的訊息。應用程式中含有一段稱作 訊息迴圈 的 用來從訊息佇列中檢索這些訊息並把它們分發到相應的視窗函式中。二 windows為當前執行的每...
訊息機制 WSAAsyncSelect
訊息機制 wsaasyncselect wsaasyncselect基於windows訊息機制非同步i o模型,為特定網路事件指定系統通知資訊.函式定義 int wsaasyncselect socket s,hwnd hwnd,unsigned int wmsg,long levent 1 引數4...