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