self汇跨、?superclass?务荆、?super的區(qū)別

self、 superclass 穷遂、 super的區(qū)別

self函匕、 superclass 、 super

self : 當前方法的調用者

class:獲取方法調用者的類對象

superclass:獲取方法調用者的父類對象

super:不是一個指針,編譯指示器(標識符)蚪黑,在程序編譯時內部會做一些特殊處理

super的本質:其實還是當前對象去調用,只不過讓當前對象去調用父類方法盅惜, super不是父類對象,指的是父類方法。

驗證:

在一個main.m文件中定義一個Person類祠锣,重寫description方法酷窥。

#import <objc/message.h>

@interface Person : NSObject

@end

@implementation Person

- (NSString *)description

{

? ? // super:當前對象調用

? ? // 調用NSObject方法

? return [super description];

}

@end

int main(int argc, const char * argv[]) {

? ? @autoreleasepool {

? ? }

? ? return 0;

}

在終端使用cd命令跳轉的main.m所在的目錄下,然后輸入:clang -rewrite-objc main.m 命令伴网,便可以將main.m文件轉換為mian.cpp文件蓬推,打開文件在文件的末尾出可以看到[super description]這句代碼的底層實現(xiàn)如下:

((NSString *(*)(__rw_objc_super *, SEL))(void *)objc_msgSendSuper)((__rw_objc_super){(id)self, (id)class_getSuperclass(objc_getClass("Person"))}, sel_registerName("description"));

將上面代碼簡化掉強制類型轉換后代碼如下:

objc_msgSendSuper({self, class_getSuperclass(objc_getClass("Person"))}, sel_registerName("description"))

其中{self,class_getSuperclass(objc_getClass("Person"))}j即為super的底層實現(xiàn),所以使用super調用父類的方法澡腾,其本質仍是當前對象調用父類的方法沸伏。

// ViewController.m文件

- (void)viewDidLoad {

? ? // 創(chuàng)建SubPerson

? ? SubPerson *subP = [[SubPerson alloc] init];

? ? [subP test];

}

//Person.m 文件

- (void)test

{

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

}

//SubPerson.m 文件

- (void)test

{

? ? // 測試1

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

? ? // 測試2

? ? [super test];

}

測試1打印結果為:SubPerson Person SubPerson Person

測試2打印結果為:SubPerson Person SubPerson Person

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末糕珊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子毅糟,更是在濱河造成了極大的恐慌红选,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姆另,死亡現(xiàn)場離奇詭異喇肋,居然都是意外死亡,警方通過查閱死者的電腦和手機迹辐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門蝶防,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人明吩,你說我怎么就攤上這事间学。” “怎么了印荔?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵低葫,是天一觀的道長。 經常有香客問我仍律,道長嘿悬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任染苛,我火速辦了婚禮鹊漠,結果婚禮上,老公的妹妹穿的比我還像新娘茶行。我一直安慰自己躯概,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布畔师。 她就那樣靜靜地躺著娶靡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪看锉。 梳的紋絲不亂的頭發(fā)上姿锭,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音伯铣,去河邊找鬼呻此。 笑死,一個胖子當著我的面吹牛腔寡,可吹牛的內容都是我干的焚鲜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忿磅!你這毒婦竟也來了糯彬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤葱她,失蹤者是張志新(化名)和其女友劉穎撩扒,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體吨些,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡搓谆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锤灿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挽拔。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖但校,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情啡氢,我是刑警寧澤状囱,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站倘是,受9級特大地震影響亭枷,放射性物質發(fā)生泄漏。R本人自食惡果不足惜搀崭,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一叨粘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘤睹,春花似錦升敲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至获茬,卻和暖如春港庄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恕曲。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工鹏氧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佩谣。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓把还,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笨篷,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容

  • 宴會上瞳秽,夫人們無不酸溜溜的嘲諷著滿身珠翠的范香兒,“瞧她那副暴發(fā)戶的樣子率翅,真是一朵鮮花插在牛糞上练俐。”范香兒把玩著手...
    相濡以沫_cfc8閱讀 540評論 0 0
  • 清風竹憶 我依然記得雨果的一句名言——“音樂表達的是無法用語言描述冕臭,卻又不可能對其保持沉默的東西腺晾。” 當我們聽著那...
    清風竹憶閱讀 262評論 0 0
  • 三十歲之前辜贵,還可以偶爾賣個萌悯蝉,撒個嬌,照相時再撅個嘟嘟嘴托慨,好像年齡就真的只是個數字鼻由,衰老這個詞永遠不會和自己扯上關...
    星蘭相隨閱讀 115評論 0 1
  • 春風暖.和白馬卓瑪巜春》 風來搖翠醒 瘦枝點點紅 花間黃雀唱 春色暖融融 2019.1.30改: 風拂枝枝翠 花開...
    詩呆閱讀 2,484評論 44 89
  • 請忽略臟臟的紗窗,欣賞一下這只靜默的蟬厚棵,趴在我家窗戶的紗窗上蕉世,以一種禪定的姿態(tài)注視著室內。 不知什么時間婆硬,不知什么...
    伊說初心閱讀 555評論 0 2