instancetype是clang3.5開始,clang提供的一個關(guān)鍵字,表示某個方法返回的未知類型的Objective-C對象。
創(chuàng)新互聯(lián)是一家企業(yè)級云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營經(jīng)驗(yàn)。主營GPU顯卡服務(wù)器,站群服務(wù)器,達(dá)州電信機(jī)房,海外高防服務(wù)器,服務(wù)器機(jī)柜,動態(tài)撥號VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。
instancetype只能作為返回值,不能像id那樣作為參數(shù)。
使用 instancetype 返回的一定是調(diào)用該方法的實(shí)例,而id則不一定,因?yàn)閕d是作為一個范型來使用的
相同點(diǎn):都可以作為方法的返回類型
①instancetype可以返回和方法所在類相同類型的對象,id只能返回未知類型的對象;
②instancetype只能作為返回值,不能像id那樣作為參數(shù)
使用instancetype有三點(diǎn)好處:
1、明確性。代碼只做你讓它做的事,而不是其他。
2、程式化。你會養(yǎng)成好習(xí)慣,這些習(xí)慣在某些時候會很有用,而且肯定有用武之地。
3、一致性。讓代碼可讀性更好。
用instancetype代替init作為返回值的確沒有技術(shù)上的好處。但這是因?yàn)榫幾g器自動將id轉(zhuǎn)化成了instancetype。你以為init返回的值類型是id,其實(shí)編譯器返回了instancetype。
在寫一條返回id的消息前,問自己:這個類返回實(shí)例嗎?如果返回,用instancetype。
肯定有需要返回id的時候,但你用instancetype的頻率應(yīng)該會更高