通常在我們定義靜態(tài)方法,返回實(shí)例對(duì)象時(shí),將返回值類型定義成instancetype
,除了instancetype
修飾外,還有id
和__kindof
兩種關(guān)鍵字,接下來(lái)簡(jiǎn)單介紹下三者的區(qū)別
-
id
- 返回值為
id
類型- 壞處是不能在編譯的時(shí)候檢查真實(shí)類型,可以用任意類型接收,不會(huì)有任何警告
- 在使用實(shí)例時(shí)無(wú)法使用點(diǎn)語(yǔ)法,歸根結(jié)底還是因?yàn)轭愋?/li>
- 返回值為
-
指定具體類型
- 返回值為指定的具體類型
- 缺點(diǎn)是繼承后,子類調(diào)用方法返回值仍然是父類方法中指定的類型
- 返回值為指定的具體類型
-
instancetype
- 返回值為
instancetype
類型- 相對(duì)于
id
類型可以自動(dòng)識(shí)別當(dāng)前實(shí)例的類(應(yīng)用于繼承) - 缺點(diǎn)與
id
類似,在調(diào)用方法時(shí),還是不能確定返回值真實(shí)類型,仍然可以使用任意類型接收
- 相對(duì)于
- 返回值為
-
__kindof XXX類名
iOS 9 新增- 返回值為
__kindof XXX類名
當(dāng)前類或者它的子類- 在調(diào)用的時(shí)候,通過(guò)編譯器的智能提示可以直觀的看到返回值具體類型
- 返回值為