美文网首页
iOS 实例方法和类方法中的self与self.class有什么

iOS 实例方法和类方法中的self与self.class有什么

作者: 某非著名程序员 | 来源:发表于2019-12-12 21:09 被阅读0次

    问题:下面代码中self及self.class区别在哪?

    - (void)walkInstance {
        [self.class walkClass];
    }
    
    + (void)walkClass{   
        [self.class walkClass2];
        [self walkClass2];
    }
    
    1. 实例方法


      实例方法.png
    • self:指的是当前实例对象
    • self.class:指的是当前类对象
    1. 类方法


      静态方法.png
    • self:指的是当前类对象
    • self.class:指的是当前类对象

    无论在实例方法还是静态方法中,self.class都是类对象;而在类方法中,self与self.class都是类对象。那么两者有什么区别?

    下面是实例方法self.class调用:

    //实例对象调用self.class时调用此方法,通过isa指针找到类的class
    - (Class)class {
        return object_getClass(self);
    }
    
    Class object_getClass(id obj)
    {
        if (obj) return obj->getIsa();
        else return Nil;
    }
    

    可以看到实例方法中的self.class最终是返回了实例对象的isa指针,而实例对象的isa是指向类对象。

    下面是类方法中的self.class调用:

    + (Class)class {
        return self;
    }
    

    在静态方法中self指的是本身的类对象,self.class仅返回了本身。两者的区别实例对象是通过isa找到类对象,类对象返回的是self本身。

    相关文章

      网友评论

          本文标题:iOS 实例方法和类方法中的self与self.class有什么

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