美文网首页iOS面试
isKindOfClass 与 isMemberOfClass

isKindOfClass 与 isMemberOfClass

作者: Bonew01 | 来源:发表于2022-07-21 12:26 被阅读0次

    isKindOfClass 与 isMemberOfClass

    // MJPerson类 继承 NSObject类

        // 这句代码的方法调用者不管是哪个类(只要是NSObject体系下的),都返回YES 基类的元类对象的superClass指针指向基类的类对象

            NSLog(@"%d", [NSObject isKindOfClass:[NSObject class]]); // 1 

            NSLog(@"%d", [NSObject isMemberOfClass:[NSObject class]]); // 0

            NSLog(@"%d", [MJPerson isKindOfClass:[MJPerson class]]); // 0  MJPerson的元类与MJPerson及MJPerson的子类不是同一个类

            NSLog(@"%d", [MJPerson isMemberOfClass:[MJPerson class]]); // 0  MJPerson的元类与MJPerson类不是同一个类

            NSLog(@"%d", [[MJPerson new] isKindOfClass:[MJPerson class]]); // 1    MJPerson实例对象所指向的类对象与MJPerson类对象 是同一个类

            NSLog(@"%d", [MJPerson isMemberOfClass:object_getClass([MJPerson class])]); // 1  MJPerson的元类与 MJPerson的元类相同

            object_getClass([MJPerson class])//获取MJPerson类对象的元类

      [A isKindOfClass:[B class]])  A 对象的类 与 B类或B的子类是否相同 (A的isa指针指向的类与B类或B的子类是否相同)

        [A isMemberOfClass:[B class]])  A 对象的类 与 B类是否相同 (A的isa指针指向的类与B类是否相同)

        NSLog(@"%d", [MJPerson isMemberOfClass:object_getClass([MJPerson class])]);//1

        object_getClass([MJPerson class]): 获取MJPerson类的元类

        类对象的isa指针指向元类对象

        基类的元类对象的superClass指针指向基类的类对象

    ///具体代码

        - (BOOL)isMemberOfClass:(Class)cls {

        return [self class] == cls;

    }

    - (BOOL)isKindOfClass:(Class)cls {

        for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {

            if (tcls == cls) return YES;

        }

        return NO;

    }

    + (BOOL)isMemberOfClass:(Class)cls {

        return object_getClass((id)self) == cls;

    }

    + (BOOL)isKindOfClass:(Class)cls {

        for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {

            if (tcls == cls) return YES;

        }

        return NO;

    }

    相关文章

      网友评论

        本文标题:isKindOfClass 与 isMemberOfClass

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