iOS底層原理總結 OC方法的本質

2021-09-03 03:05:19 字數 1388 閱讀 7806

int main(int argc, const char * argv) 

return 0;

}

可以看出在我們進行lgperson初始化的時候,我們都知道會呼叫alloc,init.我這裡為了簡單只呼叫』new』.但是底層不是像我們利用呼叫的,而是呼叫了乙個函式objc_msgsend這就是我們訊息傳送的方法,因為考慮的引數我們進行了前面的強轉.如果有一定c功底就知道objc_msgsend就是傳送訊息,我們在斷點除錯viewdidload的時候,發現能列印self,_cmd這就是我們的訊息底層預設的兩個引數id,sel

通過sel能找到函式實現,底層是依賴乙個imp的函式指標

就會找我們具體的函式實現

我們模擬是不是也可不斷傳送訊息,模擬四種訊息傳送

lgstudent *s = [lgstudent new];

[s run];

// 方法呼叫底層編譯

// 方法的本質: 訊息 : 訊息接受者 訊息編號 ....引數 (訊息體)

objc_msgsend(s, sel_registername("run"));

// 類方法編譯底層

[lgstudent walk];

objc_msgsend(objc_getclass("lgstudent"), sel_registername("walk"));

// 向父類發訊息(物件方法)

struct objc_super mysuper;

mysuper.receiver = s;

mysuper.super_class = class_getsuperclass([s class]);

objc_msgsendsuper(&mysuper, @selector(run));

//向父類發訊息(類方法)

struct objc_super myclasssuper;

myclasssuper.receiver = [s class];

myclasssuper.super_class = class_getsuperclass(object_getclass([s class]));

objc_msgsendsuper(&myclasssuper, sel_registername("walk"));

iOS底層原理總結 OC物件的本質 二

ios底層原理總結 oc物件的本質 一 掘金 ios底層原理總結 oc物件的本質 二 掘金 ios底層原理總結 oc物件的分類 instance class meta calss物件的isa和superclass 掘金 ios底層原理總結 kvo kvc的本質 掘金 思考 如果我的student有三...

iOS底層原理總結 OC物件的本質 一

窺探ios底層實現 oc物件的本質 一 掘金 窺探ios底層實現 oc物件的本質 二 掘金 窺探ios底層實現 oc物件的分類 instance class meta calss物件的isa和superclass 掘金 窺探ios底層實現 kvo kvc的本質 掘金 int main int arg...

iOS 類的底層原理

首先我們探索來例項物件 類物件 元類之間的關係,執行下面 可以看到class1 class2 class3列印結果一樣,我們是不是可以認為類物件只有乙個,元類是乙個虛擬的類由系統幫我們建立,是類物件所屬的類,而元類歸屬是根元類,根元類的歸屬是自身。例項物件 person p person alloc...