super對象以及super消息發(fā)送

一:舉例說明

? ? ? ? NSLog(@"[self class] = %@",[self class]);

? ? ? ? NSLog(@"[self superclass] =%@",[self superclass]);

? ? ? ? NSLog(@"-----------------------------------------------");

//? ? [super class]底層實現(xiàn)是:

//? ? ? object_messendSuper({self,[lzhPerson class]},@selector(class));

//? ? ? 1.參數(shù)1:結(jié)構(gòu)體對象? 1.消息接收者2.從哪個類開始查找實現(xiàn);是父類開始查找實現(xiàn);

//? ? ? ? 2.參數(shù)2:方法名

? ? ? ? NSLog(@"[super? class]= %@",[super? class]);

? ? ? ? NSLog(@"[super superclass] =%@",[super superclass]);

1.注意點:

所有class類都有 class方法,所以class方法在nsobject里面實現(xiàn);不管self還是super調(diào)用都是調(diào)用的nsobject的class方法;

二:?[super class]的底層實現(xiàn)

? ? ((void(*)(__rw_objc_super *, SEL))(void*)objc_msgSendSuper)((__rw_objc_super){(id)self, (id)class_getSuperclass(objc_getClass("Student"))}, sel_registerName("run"));

? ? ? object_messendSuper({self,[lzhPerson class]},@selector(class));

? ? ? ? 1.參數(shù)1:結(jié)構(gòu)體對象? 1.消息接收者2.從哪個類開始查找實現(xiàn);是父類開始查找實現(xiàn);

?? ? ? ? 2.參數(shù)2:方法名

2.1 聲明一個結(jié)構(gòu)體對象super對象;

struct objc_super {

? ? __unsafe_unretained _Nonnull id receiver;//消息接收者

? ? __unsafe_unretained _Nonnull Class class;//消息接收者的父類;指定方法的實現(xiàn),從那個類開始搜索;

// class實際上就是傳入的當前的類,在底層會調(diào)用objc_msgSendSuper2里面會 [viewcontroller class]->superClass再去獲取父類的值;其實也是就是父類類型;

};

2.2 ?[super run];使用super對象調(diào)用函數(shù)底層實現(xiàn)如下:

?? struct__rw_objc_super args = {

? ? ? ? self,

? ? ? ? class_getSuperclass(objc_getClass("Student")),《==》[Person class];

? ? ? ? sel_registerName("run")

? ? };

?? ? objc_msgSendSuper(args,@selector("run"));

? ?1.消息接收者仍然是子類對象;

?? 2、從父類開始查找方法的實現(xiàn);

?? 3.由于class都是nsobjec的對象,所以查找的都是方法是一樣的;消息接收者是self的對象子類的;所以打印為student的類;

?? ? sueprclass的原理等價于calss;

2.3、class函數(shù)的底層實現(xiàn);

-(Class)class{

return? objc_getClass(self);

}

-(Class)superclass{

? return? class_getSuperClass(objc_getClass(self));

}

?注意:class返回的是self的類型;superclass返回的當前對象父類類型

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,076評論 0 9
  • F小姐,她在我心中一直處于一個特別的位置。我說不清我們之間的關(guān)系,興趣相投,但有差異,頗有高山流水的樣子。初中,一...
    習慣繁星點點閱讀 270評論 0 0
  • 受前幾日微博上一波浪潮的影響,但大抵還是無聊浪蕩了太久,今日打開綜藝娛樂分類下的節(jié)目單,我選擇了中華詩詞大會。 我...
    洛淵閱讀 160評論 0 0
  • 《Swift 特刊》地址:http://swift.manong.io/ 特刊內(nèi)容將保持更新,歡迎投稿。在線投稿地...
    碼農(nóng)IO閱讀 2,415評論 1 76
  • 這是來自微博的一次討論話題。微博里說:“從小覺得最厲害的人就是媽媽,不怕黑,什么都知道,做好吃的飯,把生活打...
    湯圓的丸子頭閱讀 523評論 1 0

友情鏈接更多精彩內(nèi)容