iOS instancetype和id

2018-12-29  本文已影响0人  sheldon_龙

简介

IOS开发中经常会碰到不确定类型的情况,在这种情况下OC提供了两种方式供开发者选择:

其中第3点, 会发生在如下情况下:

+ (id)person{
   return [[self alloc] init];
}

NSString *str = [Person person];

上面这行代码,用字符串类型的指针指向Person类的对象,编译通过,因为person返回的id类型,任何指针都可以指向它

而如果用instancetype,编译时,会有警告.也就是说instancetype比id多了检测真实类型的功能,可以提前暴露程序存在的风险

+ (instancetype)person{
   return [[self alloc] init];
}

NSString *str = [Person person]; //会有警告,[Person person]返回的Person类型, 警告信息:把Person类型的数据赋值给字符串类型

可以这么说,作为返回值时,凡是用id的地方,都建议换成instancetype,例如下面的代码

- (instancetype)initWithDic:(NSDictionary *) app
{
  if(self == [super init]){
   self.name = app[@"name"];
    self.icon = app[@"icon"];
  }
return self;
}
+ (instancetype)initWithDic:(NSDictionary *) app
{
  return [[[self alloc]init] initWithDic:app];
}
上一篇 下一篇

猜你喜欢

热点阅读