美文网首页
iOS self和类名 的区别

iOS self和类名 的区别

作者: L安安 | 来源:发表于2019-06-13 11:13 被阅读0次

最近在看《iOS开发快速进阶与实战》,其中看到使用self和类名的区别。之前我一直以为这两者没什么区别,现在觉得还是有区别的,使用不当,可能会有错误产生。所以把我看到的分享给大家,如果有错误的地方,望各位大佬指正~

第一种:

+ (instancetype)personWithName:(NSString *)name{

    Person *p = [[Person alloc] init];

    p.name = name;

    return p;

}

第二种:

+ (instancetype)personWithName:(NSString *)name{

   Person *p = [[self alloc] init];

    p.name = name;

    return p;

}

表面上看这两个没什么区别,但其实是有区别的。实际上self是指当前类,不一定是Person类。但是使用Person就是指Person这个类。使用类方法创建实例,用[self alloc]和[person alloc]基本使用上没有任何区别和影响。但是并不代表着这两者没有区别,甚至使用上会有意料之外的错误发生。

例如:

如果有个类SubPerson继承于Person类,

SubPerson *sp = [[SubPerson personWithName:@"anan"];

方法里如果用的是第一种,则personWithName返回时Person的实例

如果使用的是第二种,则personWithName返回的是SubPerson的实例。

相关文章

  • iOS self和类名 的区别

    最近在看《iOS开发快速进阶与实战》,其中看到使用self和类名的区别。之前我一直以为这两者没什么区别,现在觉得还...

  • 单继承

    父类.方法(self,*args)和super(父类名,self).方法 当super(父类名,self).方法 ...

  • self和super的区别

    self和super的区别 self调用自己方法,super调用父类方法 self是类,super是预编译指令 [...

  • class

    1.[self class]和 [super class] self和super的区别: self是类的一个隐藏参...

  • iOS小知识点总结

    iOS中的self访问对象属性和下划线实例变量的区别 具体见:[告诉你使用self.var 和 _var的区别][...

  • iOS self 和_区别

    self调用该类的setter或getter方法,_直接获取自己的实例变量。

  • php 面向对象知识点记录

    查找类中属性和方法 self $this static[非修饰符] parent的区别 self代表类本身 sel...

  • 深入了解runtime

    iOS经典讲解之[self class]和[super class]的区别 iOS的消息机制和消息转发 Objec...

  • iOS面试题09- 基础篇

    《2018 iOS面试题系列》 1、category 和 extension 的区别 分类有名字,类扩展没有分类名...

  • 04_对象的属性

    对象属性的声明class 类名:def init(self):self.属性名 = 初值self.属性名2 = 初值

网友评论

      本文标题:iOS self和类名 的区别

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