美文网首页
isMemberOfClass和isKindOfClass

isMemberOfClass和isKindOfClass

作者: it小小菜鸟 | 来源:发表于2020-07-23 21:02 被阅读0次

    对象调用,参数就需要传类对象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

          本文链接:https://www.haomeiwen.com/subject/xgqklktx.html