Objective-C中的self和super

來源:互聯網
上載者:User

標籤:

 Objective-C中的self和super 1.self是一個隱藏參數,super是編譯器指示符 2.self和super指向同一個訊息接收者 3.self調用是從當前類的方法列表中尋找方法,如果沒有就去父類尋找,直到尋找到NSObject類.super會直接從父類的方法中開始尋找,如果沒有就去父類得父類尋找方法,直到NSObject類 4.內部原理可以使用運行時來解釋      4.1 [self class] 調用方法時會通過 objc_msgSend函數發送訊息id objc_msgSend(id theReceiver, SEL theSelector, ...)這個函數的第一個參數就是訊息接收者(self),第二個是要調用的方法(class).      4.2 [super class]調用方法時會通過 objc_msgSendSuper函數來發送訊息 id objc_msgSendSuper( struct objc_super *super, SEL op, ...)第一個參數是一個結構體變數,第二個是參數是要調用的方法(class)然後這個結構體如下 
struct objc_super {    id receiver;    Class superClass;};
 第一個成員是訊息接收者(self)這個就是所謂的和self 相同的訊息接收者,第二個是super的父類Person.這時就會開始方法的尋找,首先去父類中尋找class 方法,如果沒有就去父類中尋找,直到NSObjcet 下面來說說如何在類之間尋找方法主要靠ISA指標,每一個對象都有一個isa指標,預設指向類對象.在類對象中儲存著對象方法列表,成員變數列表和屬性列表. 類方法列表儲存在原類(meta)中.他們之間的關係如:  過程:首先根據方法類型確定第一個要尋找的類,(對象方法去對象類,類方法去meta類),然後依次上溯直到NSObject      

Objective-C中的self和super

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.