IOS self和super詳解實現原理及區別

2022-09-24 22:27:14 字數 1146 閱讀 3159

self和super區別

1、self呼叫自己方法,super呼叫父類方法

2、self是類,super是預編譯指令

3、【self class】和【super class】輸出是一樣的

self和super底層實現原理

1、當使用 self 呼叫方法時,會從當前類的方法列表中開始找,如果沒有,就從父類中再找;而當使用 super 時,則從父類的方法列表中開始找,然後呼叫父類的這個方法。

2、當使用 self 程式設計客棧呼叫時,會使用 objc_msgsend 函式: id objc_msgsend(id thereceiver, sel theselector, ...)。第 乙個引數是訊息接收者,第二個引數是呼叫的具體類方法的 selector,後面是 selector 方法的可變引數。以 [self setname:] 為例,編譯器會替換成呼叫 objc_msgsend 的函式呼叫,其中 thereceiver 是 self,theselector 是 @selector(setname:),這個 selector 是從當前 self 的 class 的方法列表開始找的 setname,當找到後把對應的 selector 傳遞過去。

3、www.cppcns.com當使用 super 呼叫時,會使用 objc_msgsendsuper 函式:id objc_msgsendsuper(struct objc_super *super, sel op, ...)第乙個引數是個objc_super的結構體,第二個引數還是類似上面的類方法的selector,

struct objc_super ;

當vbwlm編譯器遇到 [super setname:] 時,開始做這幾個事:

1)構 建 objc_super 的結構體,此時這個結構體的第乙個成員變數 receiver 就是 子類,和 self 相同。而第二個成員變數 superclass 就是指父類呼叫 objc_msgsendsuper 的方法,將這個結構體和 setname 的 sel 傳遞過去。

2)函式裡面在做的事情類似這樣:從 objc_super 結構體指向的 www.cppcns.comsuperclass 的方法列表開始找 setname 的 selector,找到後再以 ob>receiver 去呼叫這個 selector

本文標題: ios self和super詳解實現原理及區別

本文位址:

iOS self 和super原理詳解

self 和 super 1.self呼叫自己方法,super呼叫父類方法 2.self是類,super是預編譯指令 3.self class 和 super class 輸出是一樣的 self和super底層實現原理 1 當使用 self 呼叫方法時,會從當前類的方法列表中開始找,如果沒有,就從父...

iOS self和super的區別

首先先寫兩個類 fist和two,two繼承fist類 inte ce first nsobject void seta int c 對a賦值的方法 end implementation first void seta int c end 類2 inte ce two first void setb...

Super關鍵字詳解

可以使用super關鍵字來訪問父類的資料成員或字段。如果父類和子類具有相同的字段,則使用super來指定為父類資料成員或字段。animal和dog都有乙個共同的屬性 color。如果我們列印color屬性,它將預設列印當前類的顏色。要訪問父屬性,需要使用super關鍵字指定 super關鍵字也可以用...