美文网首页
iOS instancetype和id

iOS instancetype和id

作者: sheldon_龙 | 来源:发表于2018-12-29 08:52 被阅读0次

简介

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

  • instancetype在类型表示上,跟id一样,可以表示任何对象类型

  • instancetype只能用在返回值类型上,不能像id一样用在参数类型上

  • instancetype比id多一个好处:编译器会检测instancetype的真实类型

其中第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];
}

相关文章

  • iOS instancetype和id

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

  • iOS开发总结(一)

    instancetype和id instancetype比id多一个好处:编译器会检测instancetype的真...

  • instancetype和id

    1.相同点 都可以作为方法的返回类型 2.不同点 a.instancetype 可以返回和方法所在类相同类型的对象...

  • instancetype和id

    一、什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,...

  • instancetype和id

    相同点: instancetype 和 id 都是万能指针,指向对象,可以表示任何对象类型。 不同点: 1.ins...

  • instancetype和id

    instancetype在类型表示上跟id一样,可以表示任何对象类型;instancetype只能作用在返回值上,...

  • id和instancetype

    id id 的定义如下: 很明显,id 就是一个结构体指针,代表一个类的实例。而 NSObject 的定义为: 所...

  • ios instancetype和id的区别

  • iOS instancetype和id的区别

    上述代码块中,返回类型分为 instancetype和id两种,各在何种情况下使用呢?instancetype 关...

  • iOS - instancetype和id的区别

    1:什么是instancetype instancetype是clang 3.5 开始提供的一个关键字,表示某个...

网友评论

      本文标题:iOS instancetype和id

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