美文网首页iOS开发
instancetype和id的区别

instancetype和id的区别

作者: zfl1024 | 来源:发表于2017-03-14 16:30 被阅读4次

instancetype  clang 3.5 提供的关键字,  表示:某方法返回未知类型的OC对象

都知道id任意类型关键字,为什么还会出现一个新的关键字?

返回关联类型

1、类方法中,alloc, new开头

2、实例方法中 autorelease,init,retain,self开头

会返回方法所在类的类型的对象,即关联返回类型的方法。

这些方法的返回结果以方法所在的类为类型。

for example

@interface NSObject

+(id)alloc;

-(id)init;

@end

当我们初始化 NSArray时

NSArray*array = [[NSArray alloc] init];

[NSArray alloc]返回类型属于关联返回类型,NSArray *

instancetype

假如一个不是关联返回类型的方法

@interface NSArray

+(id)constructAnArray;

@end

当我们初始化的时候

[NSArray constructAnArray]

得到返回类型和方法声明的返回类型一样,是id

如果使用 instancetype 作为返回类型

@interface NSArray

+(instancetype)constructAnArray;

@end

同样方式初始化

[NSArray constructAnArray]

得到的返回类型和方法所在类型相同,是 NSArray *

instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!

好处:确定对象类型帮编译器更好定位代码问题。

相同点:

作为方法的返回类型

不同点:

1、instancetype 可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象。

2、instancetype只能作为返回值,id可以作为参数.

-(void)setValue:(instancetype)value

{

}

报错!

应该写成

-(void)setValue:(id)value

{

}

相关文章

  • id 和 instanceType 有什么区别?

    id 和 instanceType 有什么区别? 相同点 instancetype 和 id 都是万能指针,指向对...

  • 内存管理总结

    1.id和instanceType区别? 2. id和NSObject区别? 3. id、nil、Nil、NULL...

  • id和instancetype区别

    init函数返回类型必须是instancetype,这个和id的区别是,id代表任意NSObject,而insta...

  • instanceType 和 id 区别

    参考博文?: instanceType & id 区别 关联返回类型(related res...

  • instancetype 和ID区别

    instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型! 好处:确定对象类型帮编译器更好定...

  • instancetype和id区别

    // instancetype == id == 万能指针 == 指向一个对象// id在编译的时候不能判断对象的...

  • instancetype 和 id 区别

    区别1: 在ARC(Auto Reference Count)环境下: instancetype用来在编译期确定实...

  • instancetype和id 区别

    首先要弄清楚两者的区别需要说清楚两个概念:关联返回类型和非关联返回类型。根据Cocoa的命名规则,满足下述规则的方...

  • instancetype和id区别

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

  • instancetype和id区别

    相同点:都可以作为方法的返回值类型 不同点:instancetype只能作为返回值,不能像id那样作为参数inst...

网友评论

    本文标题:instancetype和id的区别

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