美文网首页
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