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

{

}

相關文章
相關標籤/搜索