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