iOS self和类名 的区别

2019-06-13  本文已影响0人  L安安

最近在看《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的实例。

上一篇下一篇

猜你喜欢

热点阅读