創(chuàng)建一個(gè)Person類(lèi),再創(chuàng)建一個(gè)繼承與Person的SonPerson類(lèi).
在SonPerson中聲明一個(gè)exercise方法打印[self class] [super class]



結(jié)果發(fā)現(xiàn)在子類(lèi)中打印[self class]與[super class]結(jié)果是相同的,都是打印調(diào)用者的class名稱(chēng)..SonPerson.
我們知道self是類(lèi)的隱藏參數(shù),指向調(diào)用方法的這個(gè)類(lèi)的實(shí)例.是一個(gè)指針.
而super跟self不一樣,并不是指向父類(lèi)的指針.是一個(gè)編譯器修飾符.作用:
用self 調(diào)用方法是從此類(lèi)的方法列表當(dāng)中找對(duì)應(yīng)方法調(diào)用..如果沒(méi)有就從父類(lèi)當(dāng)中找;而super關(guān)鍵詞是從父類(lèi)的方法列表當(dāng)中找,調(diào)用父類(lèi)的那個(gè)方法..但是這兩種方式,事件的調(diào)用者都是當(dāng)前的實(shí)例SonPerson,最終都是找到了NSObject中的class的方法.
從runtime的底層API來(lái)看..調(diào)用[self class] 的時(shí)候是調(diào)用了objc_msgSend(self,@selector(class)),直接從當(dāng)前實(shí)例里找class的實(shí)現(xiàn)
調(diào)用[super class]的時(shí)候是調(diào)用了objc_msgSendSuper(<#struct objc_super *super#>, <#SEL op, ...#>),里面?zhèn)鲀蓚€(gè)參數(shù),
第一個(gè)參數(shù)objc_super結(jié)構(gòu)體中有兩個(gè)成員.

receiver就是調(diào)用這個(gè)事件的接受者.self? ? 然后第二個(gè)就是父類(lèi)的class,Person,然后從這個(gè)Person類(lèi)開(kāi)始找class方法,一直找到了NSObject,最后這兩個(gè)方法都是調(diào)用了 [self class]
打印當(dāng)前類(lèi)的class.