对象调用,参数就需要传类对象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;
}
网友评论