self super isMemberOfClass isKindOfClass 用法

239 阅读1分钟
+ (id)self {
    return (id)self;
}

- (id)self {
    return self;
}

+ (Class)class {
    return self;
}

- (Class)class {
    return object_getClass(self);
}

+ (Class)superclass {
    return self->superclass;
}

- (Class)superclass {
    return [self class]->superclass;
}

+ (BOOL)isMemberOfClass:(Class)cls {
    return object_getClass((id)self) == cls;
}

- (BOOL)isMemberOfClass:(Class)cls {
    return [self class] == cls;
}

+ (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}

- (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}

+ (BOOL)isSubclassOfClass:(Class)cls {
    for (Class tcls = self; tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}

问如下打印啥?

       NSLog(@"[self class]%@",[self class]);
       NSLog(@"[super class]%@",[super class]);
       NSLog(@"==================");
       NSLog(@"[self superClass]%@",[self superclass]);
       NSLog(@"[super superClass]%@",[super superclass]);
        NSLog(@"%d",[[NSObject class] isKindOfClass:[NSObject class]]);
        NSLog(@"%d",[[NSObject class] isMemberOfClass:[NSObject class]]);
        NSLog(@"%d",[[Person class] isKindOfClass:[Person class]]);
        NSLog(@"%d",[[Person class] isMemberOfClass:[Person class]]);