一、instancetype只能用於方法的返回類型,而id用處和NSObject *相似。
二、instancetype會告訴編譯器當前的類型,這點和NSObject *相似,但id對於編譯器倒是無類型的,調用任何方法不會給出錯誤提示。
三、對於init方法,id和instancetype是沒有區別的。由於編譯器會把id優化成instancetype。當明確返回的類型就是當前Class時,使用instancetype能避免id帶來的編譯不出的錯誤狀況。
四、NSObject Class和id都是僅包含了一個Class isa。但NSObject 包含了更多方法的定義。
五、id和instancetype都能省去具體類型,提升代碼的通用性。而這是NSObject *不及的。
六、我的認爲:instancetype是對id和NSObject *二者不足的一個補充。
參考連接: