instancetype? clang 3.5 提供的關鍵字唁影,? 表示:某方法返回未知類型的OC對象
都知道id任意類型關鍵字,為什么還會出現(xiàn)一個新的關鍵字遇伞?
返回關聯(lián)類型
1、類方法中捶牢,alloc鸠珠, new開頭
2、實例方法中 autorelease秋麸,init渐排,retain,self開頭
會返回方法所在類的類型的對象,即關聯(lián)返回類型的方法灸蟆。
這些方法的返回結果以方法所在的類為類型驯耻。
for example
@interface NSObject
+(id)alloc;
-(id)init;
@end
當我們初始化 NSArray時
NSArray*array = [[NSArray alloc] init];
[NSArray alloc]返回類型屬于關聯(lián)返回類型,NSArray *
instancetype
假如一個不是關聯(lián)返回類型的方法
@interface NSArray
+(id)constructAnArray;
@end
當我們初始化的時候
[NSArray constructAnArray]
得到返回類型和方法聲明的返回類型一樣炒考,是id
如果使用 instancetype 作為返回類型
@interface NSArray
+(instancetype)constructAnArray;
@end
同樣方式初始化
[NSArray constructAnArray]
得到的返回類型和方法所在類型相同可缚,是 NSArray *
instancetype的作用,就是使那些非關聯(lián)返回類型的方法返回所在類的類型斋枢!
好處:確定對象類型幫編譯器更好定位代碼問題帘靡。
相同點:
作為方法的返回類型
不同點:
1、instancetype 可以返回和方法所在類相同類型的對象瓤帚,id只能返回未知類型的對象描姚。
2、instancetype只能作為返回值戈次,id可以作為參數(shù).
-(void)setValue:(instancetype)value
{
}
報錯轩勘!
應該寫成
-(void)setValue:(id)value
{
}