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...