做開發(fā)准脂,一定要把英語學好噢~
做開發(fā)饿悬,一定要把英語學好噢~
做開發(fā)刹枉,一定要把英語學好噢~
嗯叽唱,重要的事情說三遍
因為member是會員、成員的意思微宝,因此我一直誤認為isMemberOfClass的意思是否是子類的意思棺亭,經(jīng)過試驗我要拔除“誤認為”這個梗,下面來看一些我的理解和代碼蟋软。
網(wǎng)上很多童鞋們是這么解釋的:
isMemberOfClass
一個對象是否是某個類的成員
isKindOfClass
一個對象是否是一個類的成員镶摘,或者是派生自該類的類的成員
因為成員這個詞定義的廣泛性专甩,我覺得可能使用“實例”來解釋會更加易懂。
isMemberOfClass
一個對象是否是某個類的實例
isKindOfClass
一個對象是否是一個類的實例钉稍,或者是派生自該類的類的實例
@interface CatA : NSObject
@end
@interface CatB : CatA
@end
@implementation CatC : NSObject
CatA *catA = [[CatA alloc] init];
CatB *catB = [[CatB alloc] init];
//第一組
[catA isKindOfClass:[A class]] = YES
[catA isMemberOfClass:[A class]] = YES
//第二組
[catB isKindOfClass:[CatB class]] = YES
[catB isMemberOfClass:[CatB class]] = YES
//第三組
[catB isKindOfClass:[CatA class] = YES
[catB isMemberOfClass:[CatA class] = NO
@end
上面代碼可以知道涤躲,CatB是CatA的子類,分析三組數(shù)據(jù):
一贡未、第一組
第一組數(shù)據(jù)catA种樱,是類CatA的一個實例,根據(jù)isMemberOfClass和isKindOfClass的定義(一個對象是否是某個類的實例)俊卤,毋庸置疑答案是YES嫩挤。
一、第二組
第二組數(shù)據(jù)catB消恍,是類CatB的一個實例岂昭,同第一組數(shù)據(jù)結果一樣都是YES。
一狠怨、第三組(重頭戲)
第三組我們已經(jīng)知道CatB是CatA的子類约啊,也就是說CatB是CatA的派生類,并且catB是類CatB的實例對象佣赖,符合isKindOfClass定義的第二條恰矩, 所以[catB isKindOfClass:[CatA class] = YES;不符合isMemberOfClass的定義所以NO憎蛤。
結論:
2.[子類實例 isMemberOfClass 父類 ] = NO [子類實例 isKindOfClass 父類 ] = YES```