您的位置: 首頁 >科技 >

Objective-C引入了零運(yùn)行時(shí)成本直接法

2022-09-02 08:13:02 編輯:雷茜中 來源:
導(dǎo)讀 Objective-C引入了零運(yùn)行時(shí)成本直接法自S wift于2014年推出以來,Objective-C只知道一些小的變化,主要是為了驗(yàn)證其與Swift的互操作性。然...

Objective-C引入了零運(yùn)行時(shí)成本直接法

自S wift于2014年推出以來,Objective-C只知道一些小的變化,主要是為了驗(yàn)證其與Swift的互操作性。然而,Objective-C并不是一種邊緣語言,它最近增加了對(duì)“直接”方法的支持,這些方法看起來像普通的類方法,但表現(xiàn)得更像C函數(shù)。

雖然Swift作為構(gòu)建iOS應(yīng)用程序的首選語言吸引了最大的興趣,但Objective-C仍然在開發(fā)人員中很受歡迎。事實(shí)上,如果真的是斯威夫特在2016年首次超過TIOBE指數(shù)中的Objective-C,那么截至2019年11月,Objective-C在TIOBE指數(shù)中已經(jīng)攀升至第12位,斯威夫特排名第10位。有趣的是,這兩種語言已經(jīng)多次交換了他們的TIOBE排名。同樣,Stack Overflow語言排名根據(jù)流行的問答論壇上提出的問題數(shù)量來衡量語言的采用程度,這突出了人們對(duì)Objective-C的興趣下降。Stack Overflow數(shù)字可以通過Swift收集進(jìn)入iOS開發(fā)領(lǐng)域的大多數(shù)新開發(fā)人員,以及過去幾年對(duì)Objective-C的修改次數(shù)減少來具體解釋。

盡管如此,Objective-C的新功能還是讓很多人感到有些意外。簡(jiǎn)而言之,一個(gè)直接方法允許定義一些特殊類型的屬性,這些屬性不附帶Objective-C元數(shù)據(jù),其getter和setter方法幾乎表現(xiàn)為直C函數(shù)。這個(gè)新特性的語法是[email protected]語法的直接擴(kuò)展:

直接方法的使用通過objc_msgSend消除了與Objective-C運(yùn)行時(shí)方法解析相關(guān)的一些開銷..這使得使用這個(gè)新功能來優(yōu)化一些關(guān)鍵路徑變得有趣,就像PSPD FKit知名度的iOS開發(fā)人員彼得·斯坦伯格在Twitter上所說的那樣。無論如何,并不是所有的開銷都被刪除,因?yàn)長(zhǎng)LVM中的直接方法實(shí)現(xiàn)力求使其與標(biāo)準(zhǔn)的Object-C方法兼容。特別是,隱式self和_cmd參數(shù)都被保留,并進(jìn)行了一些檢查,以確保兩者在調(diào)用方法時(shí)都是正常的。

開發(fā)人員如何使用直接方法有一些限制。首先,直接方法只能在內(nèi)部、私有API上使用,不能被框架公開。此外,重載的方法不能是直接的,也不能是直接的方法,也不能重載直接的方法;實(shí)現(xiàn)不能重新聲明它與直接的接口的非直接方法;所需的協(xié)議方法不能是直接的;最后,您不能發(fā)送不限定的id直接方法。

除了優(yōu)化關(guān)鍵路徑的可能性外,對(duì)這一新的客觀-C特征的反應(yīng)并不完全是積極的一面。iOS開發(fā)人員TannerB評(píng)論說,直接方法損害了許多基本的目標(biāo)C特性,如KVC、KVO、方法閃爍等。第一天應(yīng)用程序開發(fā)商BJ Homer表示,他擔(dān)心蘋果可能會(huì)使用直接方法來使調(diào)整更難完成:

objc_direct_member注釋似乎有效地實(shí)現(xiàn)了Objc的真正私有方法。靜態(tài)發(fā)送,不可覆蓋。我可以看到蘋果在內(nèi)部大量使用這種方法來避免人們調(diào)用私有方法。

這一擔(dān)憂在某種程度上被著名的iOS開發(fā)者和圖書作者尼克·洛克伍德所忽視,因?yàn)橹苯臃椒ㄖ荒苁撬饺说模?/p>

這應(yīng)該有助于減輕人們的擔(dān)憂,即它將從根本上改變Objective-C的性質(zhì),方法是阻止像KVO這樣的滑動(dòng)和破壞功能。

蘋果高級(jí)軟件工程師皮埃爾·哈布齊特也證實(shí)了這一點(diǎn)。

最后,雖然直接方法已經(jīng)合并為L(zhǎng)LVM,但不太可能在明年WWDC之前在X code中提供這些方法。


免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!

最新文章

精彩推薦

圖文推薦

點(diǎn)擊排行

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)歸原作者所有。