美文网首页
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和类名 的区别

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