2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號(hào):閩ICP備19027007號(hào)-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。
Objective-C引入了零運(yùn)行時(shí)成本直接法
自S wift于2014年推出以來(lái),Objective-C只知道一些小的變化,主要是為了驗(yàn)證其與Swift的互操作性。然而,Objective-C并不是一種邊緣語(yǔ)言,它最近增加了對(duì)“直接”方法的支持,這些方法看起來(lái)像普通的類(lèi)方法,但表現(xiàn)得更像C函數(shù)。
雖然Swift作為構(gòu)建iOS應(yīng)用程序的首選語(yǔ)言吸引了最大的興趣,但Objective-C仍然在開(kāi)發(fā)人員中很受歡迎。事實(shí)上,如果真的是斯威夫特在2016年首次超過(guò)TIOBE指數(shù)中的Objective-C,那么截至2019年11月,Objective-C在TIOBE指數(shù)中已經(jīng)攀升至第12位,斯威夫特排名第10位。有趣的是,這兩種語(yǔ)言已經(jīng)多次交換了他們的TIOBE排名。同樣,Stack Overflow語(yǔ)言排名根據(jù)流行的問(wèn)答論壇上提出的問(wèn)題數(shù)量來(lái)衡量語(yǔ)言的采用程度,這突出了人們對(duì)Objective-C的興趣下降。Stack Overflow數(shù)字可以通過(guò)Swift收集進(jìn)入iOS開(kāi)發(fā)領(lǐng)域的大多數(shù)新開(kāi)發(fā)人員,以及過(guò)去幾年對(duì)Objective-C的修改次數(shù)減少來(lái)具體解釋。
盡管如此,Objective-C的新功能還是讓很多人感到有些意外。簡(jiǎn)而言之,一個(gè)直接方法允許定義一些特殊類(lèi)型的屬性,這些屬性不附帶Objective-C元數(shù)據(jù),其getter和setter方法幾乎表現(xiàn)為直C函數(shù)。這個(gè)新特性的語(yǔ)法是[email protected]語(yǔ)法的直接擴(kuò)展:
直接方法的使用通過(guò)objc_msgSend消除了與Objective-C運(yùn)行時(shí)方法解析相關(guān)的一些開(kāi)銷(xiāo)..這使得使用這個(gè)新功能來(lái)優(yōu)化一些關(guān)鍵路徑變得有趣,就像PSPD FKit知名度的iOS開(kāi)發(fā)人員彼得·斯坦伯格在Twitter上所說(shuō)的那樣。無(wú)論如何,并不是所有的開(kāi)銷(xiāo)都被刪除,因?yàn)長(zhǎng)LVM中的直接方法實(shí)現(xiàn)力求使其與標(biāo)準(zhǔn)的Object-C方法兼容。特別是,隱式self和_cmd參數(shù)都被保留,并進(jìn)行了一些檢查,以確保兩者在調(diào)用方法時(shí)都是正常的。
開(kāi)發(fā)人員如何使用直接方法有一些限制。首先,直接方法只能在內(nèi)部、私有API上使用,不能被框架公開(kāi)。此外,重載的方法不能是直接的,也不能是直接的方法,也不能重載直接的方法;實(shí)現(xiàn)不能重新聲明它與直接的接口的非直接方法;所需的協(xié)議方法不能是直接的;最后,您不能發(fā)送不限定的id直接方法。
除了優(yōu)化關(guān)鍵路徑的可能性外,對(duì)這一新的客觀-C特征的反應(yīng)并不完全是積極的一面。iOS開(kāi)發(fā)人員TannerB評(píng)論說(shuō),直接方法損害了許多基本的目標(biāo)C特性,如KVC、KVO、方法閃爍等。第一天應(yīng)用程序開(kāi)發(fā)商BJ Homer表示,他擔(dān)心蘋(píng)果可能會(huì)使用直接方法來(lái)使調(diào)整更難完成:
objc_direct_member注釋似乎有效地實(shí)現(xiàn)了Objc的真正私有方法。靜態(tài)發(fā)送,不可覆蓋。我可以看到蘋(píng)果在內(nèi)部大量使用這種方法來(lái)避免人們調(diào)用私有方法。
這一擔(dān)憂(yōu)在某種程度上被著名的iOS開(kāi)發(fā)者和圖書(shū)作者尼克·洛克伍德所忽視,因?yàn)橹苯臃椒ㄖ荒苁撬饺说模?/p>
這應(yīng)該有助于減輕人們的擔(dān)憂(yōu),即它將從根本上改變Objective-C的性質(zhì),方法是阻止像KVO這樣的滑動(dòng)和破壞功能。
蘋(píng)果高級(jí)軟件工程師皮埃爾·哈布齊特也證實(shí)了這一點(diǎn)。
最后,雖然直接方法已經(jīng)合并為L(zhǎng)LVM,但不太可能在明年WWDC之前在X code中提供這些方法。
2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號(hào):閩ICP備19027007號(hào)-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。