1、相同点
都可以作为方法的返回类型
2、不同点
①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
②instancetype只能作为返回值,不能像id那样作为参数
3、关联返回类型方法
根据Cocoa的命名规则,满足下述规则的方法:
1、类方法中,以alloc或new开头
2、实例方法中,以autorelease,init,retain或self开头
会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法。换句话说,这些方法的返回结果以方法所在的类为类型。
4.instancetype的好处
- (id)initWithBar:(NSInteger)bar; // 关联返回类型方法
+ (id)fooWithBar:(NSInteger)bar; // 简易构造函数(非关联返回类型方法)
如上所示,其实对于关联返回类型方法而言,返回值类型是id还是instancetype都一样,一旦返回的类型不是方法所在类的类型,编译器会报警告,但是对于简易构造函数而言,如果返回值类型是id的话,编译器并不会检测它是否属于方法所在类的类型,因此,instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!