美文网首页
instancetype和id的区别

instancetype和id的区别

作者: 齐滇大圣 | 来源:发表于2015-12-26 22:54 被阅读159次

instancetype 是只能作为返回值而不能作为参数的。
当一个类返回相同类的实例的时候使用 instancetype 是合适的。

对于编译器来说以下两个是一样的,因为编译器会将①自动转换为②
①-(id)init;
②-(instancetype)init;

但如果不是init的话结果就不一样了
① +(id)buildInstance;
②+(instancetype) buildInstance;
下面放一个例子

@interface Foo : NSObject
+(id)buildInstance;(非关联返回类型方法)-(id)init;(关联返回类型方法)@end
@implementation Foo+(id)buildInstance{return [[self alloc] init];}-(id)init{return [super init];}@end
@interface Bar : Foo- (void)doSometingElse;@end
@implementation Bar- (void)doSometingElse {}@end

[[[Foo alloc] init] doSometingElse];//返回的是foo类的实例,因为编译器会自动把id转换为instancetype,所以会有警告说无dosometingelse方法
[[[Bar alloc] init] doSometingElse];//返回的是bar类的实例
[[Foo buildInstance] doSometingElse];//返回的可以是bar类的实例,因为不是init编译器不会把id转换为instancetype,所以不会有警告[[Bar buildInstance] doSometingElse];//返回的是bar类的实例

但如果把-(id)buildInstance;改为-(instancetype)buildInstance;
则[[Foo buildInstance] doSometingElse];会有警告,因为返回的是foo类的实例,无dosometingelse方法

相关文章

  • 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/rjdbhttx.html