isMemberOfClass和isKindOfClass

对象调用,参数就需要传类对象class
类调用,参数就需要传元类对象meta-class

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

        QSPerson *p = [[QSPerson alloc] init];
        
        // isMemberOfClass
        
        // isMemberOfClass 判断 p 对象的class 是否等于参数:OfClass
        NSLog(@"%d",[p isMemberOfClass:[QSPerson class]]); // QSPerson 是否是 QSPerson类:是
        NSLog(@"%d",[p isMemberOfClass:[NSObject class]]); // QSPerson 是否是 NSObject类:否
        
        // 判断 QSPerson 的元类对象是否等于参数:OfClass
        NSLog(@"%d",[QSPerson isMemberOfClass:[QSPerson class]]); // QSPerson的元类 是否是 QSPerson类:否
        NSLog(@"%d",[[QSPerson class] isMemberOfClass:object_getClass([QSPerson class])]); // QSPerson的元类 是否是 QSPerson的元类:是
        NSLog(@"%d",[[QSPerson class] isMemberOfClass:object_getClass([NSObject class])]); // QSPerson的元类 是否是 NSObject的元类:否
        
        
        
        // isKindOfClass
        
        // 判断 p 对象的class 是否是参数:OfClass 或者它子类
        NSLog(@"%d",[p isKindOfClass:[QSPerson class]]); // QSPerson 是否是 QSPerson类 或者 QSPerson的子类:是
        NSLog(@"%d",[p isKindOfClass:[NSObject class]]); // QSPerson 是否是 NSObject类 或者 NSObject的子类:是
        
        // 判断 QSPerson 的元类对象是否是参数:OfClass 或者它子类
        NSLog(@"%d",[QSPerson isKindOfClass:[QSPerson class]]); // QSPerson的元类 是否是 QSPerson类 或者 NSObject子类:否
        NSLog(@"%d",[[QSPerson class] isKindOfClass:object_getClass([QSPerson class])]); // QSPerson 的元类 是否是 QSPerson的元类 或者 NSObject子类:是
        NSLog(@"%d",[[QSPerson class] isKindOfClass:object_getClass([NSObject class])]); // QSPerson 的元类 是否是 NSObject的元类 或者 NSObject元类的子类:是
        
        
        
        // [XXXX isKindOfClass:[NSObject class]] 只要XXX是NSObject或者NSObject的子类都会返回YES
        // QSPerson通过superclass一直找,找到最基类NSObject的superclass 指向类对象
        NSLog(@"%d",[NSObject isKindOfClass:[NSObject class]]); // 是
        NSLog(@"%d",[QSPerson isKindOfClass:[NSObject class]]); // 是
        
        // 也可以通过该 objc_getMetaClass("QSPerson"); 方法获取元类
    }
    return 0;
}

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