instancetype和id的區別,objective-c


 

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

{

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM