instancetype和id的区别,objective-c

 

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

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

返回关联类型 编译器

一、类方法中,alloc, new开头it

二、实例方法中 autorelease,init,retain,self开头编译

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

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

for exampleclang

@interface NSObjectnew

+(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的做用,就是使那些非关联返回类型的方法返回所在类的类型!

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

相同点:
做为方法的返回类型

不一样点:
一、instancetype 能够返回和方法所在类相同类型的对象,id只能返回未知类型的对象。

二、instancetype只能做为返回值,id能够做为参数.

-(void)setValue:(instancetype)value

{

}

报错!

应该写成

-(void)setValue:(id)value

{

}

相关文章
相关标签/搜索