//問(wèn)題1:instancetype和id區(qū)別?
答:instancetype只能作為返回值而id可以作為屬性砌溺,參數(shù),返回值仅讽,
instancetype在編譯的時(shí)候能判斷改方法的的返回值茫死,而id不行
1.
id在編譯的時(shí)候不能判斷對(duì)象的真實(shí)類型
instancetype在編譯的時(shí)候可以判斷對(duì)象的真實(shí)類型
2.
如果init方法的返回值是instancetype,那么將返回值賦值給一個(gè)其它的對(duì)象會(huì)報(bào)一個(gè)警告
如果是在以前, init的返回值是id,那么將init返回的對(duì)象地址賦值給其它對(duì)象是不會(huì)報(bào)錯(cuò)的
3.
id可以用來(lái)定義變量, 可以作為返回值, 可以作為形參
instancetype只能用于作為返回值
//問(wèn)題2:instancetype 應(yīng)用場(chǎng)景?
答:
一般用于構(gòu)造方法的重寫中作為返回值
以后但凡自定義構(gòu)造方法, 返回值盡量使用instancetype, 不要使用id
// instancetype == id == 萬(wàn)能指針 == 指向一個(gè)對(duì)象
// id在編譯的時(shí)候不能判斷對(duì)象的真實(shí)類型
// instancetype在編譯的時(shí)候可以判斷對(duì)象的真實(shí)類型
// id和instancetype除了一個(gè)在編譯時(shí)不知道真實(shí)類型, 一個(gè)在編譯時(shí)知道真實(shí)類型以外, 還有一個(gè)區(qū)別
// id可以用來(lái)定義變量, 可以作為返回值, 可以作為形參
// instancetype只能用于作為返回值