蘋果公司已成立10周年慰技,10年來,Xcode內(nèi)部大量api被廢棄组砚,但是有時(shí)候吻商,為了兼容低版本,我們不得不使用被廢棄的api糟红,這樣可能會(huì)使我們的代碼看起來冗余而又復(fù)雜艾帐,甚至是條理不清。
通常盆偿,當(dāng)我們從APP跳轉(zhuǎn)至第三方應(yīng)用柒爸,實(shí)現(xiàn)分享、支付等功能后事扭,返回APP時(shí)捎稚,需要處理分享、支付等結(jié)果句旱。
可能大多數(shù)人都會(huì)實(shí)現(xiàn)如下三個(gè)方法
:
細(xì)心的朋友已經(jīng)發(fā)現(xiàn),在每一個(gè)方法上面谈撒,我都寫有一句注釋:
NS_DEPRECATED_IOS(2_0, 9_0)
腥泥、NS_DEPRECATED_IOS(4_2, 9_0)
、NS_AVAILABLE_IOS(9_0)
啃匿。當(dāng)然蛔外,這種寫法并非我個(gè)人所創(chuàng)蛆楞,而是Xcode內(nèi)部標(biāo)明api信息的簡(jiǎn)單宏定義。單詞
DEPRECATED
的意思是廢棄的夹厌,單詞AVAILABLE
的意思是可用的豹爹,于是這種宏定義的意義就顯而易見了。NS_AVAILABLE_IOS(9_0)表明該api自iOS 9.0時(shí)啟用矛纹,
NS_DEPRECATED_IOS(2_0, 9_0)表明該api自iOS 2.0時(shí)啟用臂聋,到iOS 9.0時(shí)被廢棄,但是被廢棄的api
并非不能使用
或南,而是建議開發(fā)者使用相應(yīng)的api進(jìn)行替換孩等。
下面開始劃重點(diǎn),還拿這三個(gè)方法舉例采够,我們?yōu)榱思嫒莸桶姹疽薹剑谑呛醢讶齻€(gè)方法全部實(shí)現(xiàn)了,那么當(dāng)我們從第三方應(yīng)用返回APP時(shí)蹬癌,這三個(gè)方法會(huì)全部調(diào)用嗎权她?
答案是不會(huì)全部調(diào)用,但是會(huì)調(diào)用其中的一個(gè)
逝薪。
那么隅要,這種api的調(diào)用機(jī)制是什么,經(jīng)過反復(fù)的測(cè)試和嚴(yán)密的推斷翼闽,我做出大膽猜想:應(yīng)用程序會(huì)優(yōu)先調(diào)用當(dāng)前iOS系統(tǒng)內(nèi)未被廢棄的api拾徙。
在此處,我們暫且把如上三個(gè)方法簡(jiǎn)稱為
方法一
感局、方法二
和方法三
。
若是運(yùn)行在iOS10系統(tǒng)上暂衡,由于方法一询微、方法二均被廢棄
,因此調(diào)用方法三
狂巢,
若是運(yùn)行在iOS8系統(tǒng)上撑毛,由于方法一被廢棄
,方法三未啟用
唧领,因此調(diào)動(dòng)方法二
藻雌。
為了驗(yàn)證這個(gè)結(jié)論,我找到了類似情況的api(推送)進(jìn)行測(cè)試斩个,與預(yù)期結(jié)果完全一致
胯杭。
至此,困擾我許久的問題終于解決受啥,如果大家還有什么好的建議或想法做个,歡迎留言鸽心。
我們是偉大的程序員,我們天生愛分享居暖!