instance和id的區別

來源:互聯網
上載者:User

標籤:

 

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

{

}

 

instance和id的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.