在寫代碼的時候這個差距其實是不打看的出得,很多時候也就無所謂叫什么,很多人為了便于理解,干脆就叫函數(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ù)的返回值返回。
消息發(fā)送&&函數(shù)調(diào)用
最后編輯于 :
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(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一....
- 我們常常會聽說 Objective-C 是一門動態(tài)語言,那么這個「動態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
- 一、類的數(shù)據(jù)結構 Class(指針) typedef struct objc_class *Class; /* 這...