消息發(fā)送&&函數(shù)調(diào)用

在寫代碼的時候這個差距其實是不打看的出得,很多時候也就無所謂叫什么,很多人為了便于理解,干脆就叫函數(shù)調(diào)用。
這個其實應該是oc的一個特色,消息發(fā)送。
具體的類
typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id; typedef struct objc_selector *SEL; typedef id (*IMP)(id, SEL, ...);
類結構
struct objc_class { **struct** objc_class **super_class; /*父類*/** const char *name; **/***類名字*/ long version; ** /***版本信息*/ long info; **/***類信息*/ long instance_size; **/***實例大小*/ **struct** objc_ivar_list *ivars; ** /***實例參數(shù)鏈表*/ **struct** objc_method_list **methodLists; ** /*方法鏈表*/** **struct** objc_cache *cache; **/***方法緩存*/ **struct** objc_protocol_list *protocols; ** /*協(xié)議鏈表*/** };
在這個methodLists中是一個方法的list
typedef struct objc_method *Method; typedef struct objc_ method { **SEL method_name;//方法名稱** **char *method_types;//方法參數(shù)類型** **IMP method_imp;//方法實現(xiàn)的函數(shù)指針** };
當你發(fā)送消息時,首先回去找它對應的方法list,找到后就會使用相應的方法。
大致是這樣的流程,當然細節(jié)也很多
1,它首先找到 SEL 對應的方法實現(xiàn) IMP。因為不同的類對同一方法可能會有不同的實現(xiàn),所以找到的方法實現(xiàn)依賴于消息接收者的類型。
2, 然后將消息接收者對象(指向消息接收者對象的指針)以及方法中指定的參數(shù)傳遞給方法實現(xiàn) IMP。
3, 最后,將方法實現(xiàn)的返回值作為該函數(shù)的返回值返回。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,051評論 0 9
  • 我們常常會聽說 Objective-C 是一門動態(tài)語言,那么這個「動態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,333評論 0 7
  • runtime 運行時語言,實現(xiàn)Object-C的C語言庫,將OC轉(zhuǎn)換成C進行編譯的過渡者。 作為一門動態(tài)編程語言...
    夜雨聲煩_閱讀 627評論 0 0
  • 一、類的數(shù)據(jù)結構 Class(指針) typedef struct objc_class *Class; /* 這...
    NBeanN閱讀 687評論 0 4
  • 最近一直被換工作換行業(yè)的事情所困擾,于是問了身邊很多人的意見。他們的說法是這樣的。 說法一(現(xiàn)在的...
    橘籽唄閱讀 318評論 0 0

友情鏈接更多精彩內(nèi)容