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
{
}