iOS-isa走位面試題

準備

isa流程圖.png

下題分別輸出什么

BOOL re1 = [(id)[NSObject class] isKindOfClass:[NSObject class]];    
BOOL re2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]];
BOOL re3 = [(id)[LGPerson class] isKindOfClass:[LGPerson class]];
BOOL re4 = [(id)[LGPerson class] isMemberOfClass:[LGPerson class]];
NSLog(@" re1 :%hhd\n re2 :%hhd\n re3 :%hhd\n re4 :%hhd\n",re1,re2,re3,re4);

BOOL re5 = [(id)[NSObject alloc] isKindOfClass:[NSObject class]];
BOOL re6 = [(id)[NSObject alloc] isMemberOfClass:[NSObject class]];
BOOL re7 = [(id)[LGPerson alloc] isKindOfClass:[LGPerson class]];
BOOL re8 = [(id)[LGPerson alloc] isMemberOfClass:[LGPerson class]];
NSLog(@" re5 :%hhd\n re6 :%hhd\n re7 :%hhd\n re8 :%hhd\n",re5,re6,re7,re8);

第一步
通過題目可得re1察绷,re2,re3,re4,這里的isKindOfClassisMemberOfClass是一個類方法
第二步
isKindOfClass類方法的代碼是:

+ (BOOL)isKindOfClass:(Class)cls {
    //for (int i = 0;i<2;i++){我們第一次進來的i=0}
    for (Class tcls = self->ISA(); tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}

第三步
分析 re1 = [(id)[NSObject class] isKindOfClass:[NSObject class]];

//源代碼里的定義
typedef struct objc_object *id;

+ (Class)class {
    return self;
}

(id)[NSObject class] ->id(NSObject)->NSObject
[NSObject class] ->NSObject
re1 = [NSObject isKindOfClass:NSObject];

帶入我們第二步isKindOfClass類方法里面

第一次循環(huán)
if (NSObject的isa == NSObject) return YES;

配合isa走位圖最終返回re1 = 1爷狈,同理可得re3 = 0。

第四步
isMemberOfClass類方法的代碼是:

+ (BOOL)isMemberOfClass:(Class)cls {
    return self->ISA() == cls;
}

re2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]];
=>
re2 = [NSObject isMemberOfClass:NSObject];
在結合isa走位圖得到re2 = 0谓媒,同理可得re4 = 0淆院。
最后得到的答案就是

re1 :1
re2 :0
re3 :0
re4 :0

第五步
通過題目可得re5,re6句惯,re7土辩,re8,這里的isKindOfClassisMemberOfClass是一個實例方法
isKindOfClass實例方法的代碼是:

- (BOOL)isKindOfClass:(Class)cls {
    //for (int i = 0;i<2;i++){我們第一次進來的i=0}
    for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
        //理解這里循環(huán)第一次進來的數值很重要
        //第一次進來的 tcls = [self class];后面進來的才是 tcls->superclass
        if (tcls == cls) return YES;
    }
    return NO;
}

分析
re5 = [(id)[NSObject alloc] isKindOfClass:[NSObject class]];

[NSObject alloc]->NSObject Intance
[NSObject class]->NSObject

第一次循環(huán)
if (([NSObject Intance]的class=》NSObject) == NSObject) return YES;
}

再配合和isa的走位圖最終得到的re5=1抢野,同理可得re7=1

第六步
isMemberOfClass實例方法的代碼是

- (BOOL)isMemberOfClass:(Class)cls {
    return [self class] == cls;
}

分析 re6 = [(id)[NSObject alloc] isMemberOfClass:[NSObject class]];
=》
re6 = [(id)[NSObject alloc] isMemberOfClass:[NSObject class]];

return ([NSObject Intance]的class=》NSObject) == NSObject;

再配合和isa的走位圖最終得到的re6=1拷淘,同理可得re8=1
最終得到

re5 :1
re6 :1
re7 :1
re8 :1
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市指孤,隨后出現的幾起案子启涯,更是在濱河造成了極大的恐慌,老刑警劉巖恃轩,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件结洼,死亡現場離奇詭異,居然都是意外死亡叉跛,警方通過查閱死者的電腦和手機松忍,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筷厘,“玉大人鸣峭,你說我怎么就攤上這事∷盅蓿” “怎么了摊溶?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長充石。 經常有香客問我莫换,道長,這世上最難降的妖魔是什么赫冬? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任浓镜,我火速辦了婚禮,結果婚禮上劲厌,老公的妹妹穿的比我還像新娘。我一直安慰自己听隐,他們只是感情好补鼻,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般风范。 火紅的嫁衣襯著肌膚如雪咨跌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天硼婿,我揣著相機與錄音锌半,去河邊找鬼。 笑死寇漫,一個胖子當著我的面吹牛刊殉,可吹牛的內容都是我干的。 我是一名探鬼主播州胳,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼记焊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了栓撞?” 一聲冷哼從身側響起遍膜,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓤湘,沒想到半個月后瓢颅,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡弛说,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年挽懦,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剃浇。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡巾兆,死狀恐怖,靈堂內的尸體忽然破棺而出虎囚,到底是詐尸還是另有隱情角塑,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布淘讥,位于F島的核電站圃伶,受9級特大地震影響,放射性物質發(fā)生泄漏蒲列。R本人自食惡果不足惜窒朋,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝗岖。 院中可真熱鬧侥猩,春花似錦、人聲如沸抵赢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至划提,卻和暖如春枫弟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹏往。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工淡诗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伊履。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓韩容,卻偏偏與公主長得像,于是被迫代替她去往敵國和親湾碎。 傳聞我的和親對象是個殘疾皇子宙攻,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353