3-3 isKindOfClass和isMemberOfClass

isKindOfClass 表示是否是同一类型的 子类和父类
isMemberOfClass 表示 是否是这个类的对象 【范围小】


    Student *testStu = Student.new;
    Person *testPer = Person.new;

    ////> 对象是否是哪个类
    BOOL res5 = [testStu isKindOfClass:[Person class]]; // 1
    BOOL res6 = [testPer isMemberOfClass:[Person class]]; //1

    BOOL res7 = [testStu isKindOfClass:[Student class]]; // 1
    BOOL res8 = [testPer isMemberOfClass:[Student class]]; //0

    NSArray *arrr = [NSArray array];
    NSMutableArray *mArrr = [NSMutableArray array];
    
    BOOL res7 = [arrr isKindOfClass:[NSArray class]]; //0
    BOOL res8 = [mArrr isMemberOfClass:[NSArray class]]; //0

注意:各种查询得出的结论是:NSArray、NSMutableArray NSString NSDictionary属于类簇,使用isMemberOfClass不能取到正确的结果。

原因是:由于类簇的性质,这类对象实际返回的实例有不确定性。
NSArray对象可能会在运行时发现其实运作的是NSCFArray(来自Core Foundation框架(C语言的实现版本),很多Cocoa对象都是如此做桥接的)
总之对于类簇的判断要谨慎。

你可能感兴趣的:(3-3 isKindOfClass和isMemberOfClass)