
2015-06-08 | & 發布者:梁國(guó)芳 &nb↑€®sp; | &nbs₹ p; 查看(kàn):3320次
IT新聞@inline
這(zhè)個(gè)特性為(wèi)編譯器(qì)提供了(l≈☆e)內(nèi)聯提示。有(yǒu)效的(de)♠©♥取值是(shì)__always和(hé)never。除非我認為(wèi)必須 ¶÷要(yào)用(yòng)這(zhè)兩個(gè∏φ)值,否則就(jiù)不(bù)會(hu€φ±ì)使用(yòng)它(特别是(shì)__alw¥↑ays)。到(dào)目前為(wèi)止與其相(xiàng)關的(de)αγ→♦規則還(hái)不(bù)是(shì)很(hěn)明(míng)确,在有(y↔♦↕€ǒu)限的(de)測試下(xià),它可(kě∏≠φ)以正常地(dì)工(gōng)作(zuò),但(dàn)還(há↓≤ i)要(yào)視(shì)具體(tǐ)情況而定。 ♦
進一(yī)步的(de)解釋:盡管底層虛拟機(jī)(L↔♠ow Level Virtual Machine, L×™<LVM)有(yǒu)強制(zhì)內(n≥≠£èi)聯的(de)概念,但(dàn)我們目前還(h∏§αái)不(bù)知(zhī)道(dào)這(zhè)個(gè) ♣₽←@inline特性是(shì)否與其直接映射,也(yě)不(bù)知(®→↔©zhī)道(dào)是(shì)否存在大(dà)小(xiǎδ≤✔o)方面的(de)限制(zhì),但(d$γàn)這(zhè)将會(huì)導緻編譯器(qì)忽略這(zhè)一∞×(yī)點而跳(tiào)過內(nèi)聯。理(lǐ★)論上(shàng)說(shuō)應該是(shìα÷∞±)這(zhè)樣的(de),但(dàn)我不(b® ù)保證一(yī)定是(shì)。
注意(當優化(huà)設置關閉時(shí))在調試模式下(xià€≈¥♠)的(de)構建将忽略@inline。
@transparent
我最初并未将這(zhè)個(gè)特性列出來(lái)。該特性會(h₩≈≥φuì)導緻編譯器(qì)在管道(dào)(pipeline)中更早地(dì)将εα≤'函數(shù)內(nèi)聯。它用(yòng)于“像+(Int, Int)這(zhè)樣非常原始的(de)函數✘★♥(shù)”,而“不(bù)應該用(yò•≤¥εng)于獨立函數(shù)”。
甚至在沒有(yǒu)優化(huà)設置的(de)調試模式下(xià₹α ≈)@transparent特性函數(shù)就(ji ×ù)會(huì)被內(nèi)聯,所以在調用(yòng)“1•→+1”這(zhè)樣的(de)函數(shù)的(de≠÷←)時(shí)候并不(bù)會(huì)特别慢δ≠×←(màn)。另外(wài)這(zhè)個(gè)特性與©β@inline(__always)非常類似。
@availability
這(zhè)個(gè)特性可(kě)以用(yòng)來(lái)λ§©×标識某些(xiē)函數(shù)隻在某些(&ε xiē)平台或版本上(shàng)可(kě)用(yòng)。第一('↕π&yī)個(gè)參數(shù)是(shì)平台,可(>✔¶kě)以用(yòng)星号(*)代表一(yī)切可(kě)用(♠₹♠®yòng),還(hái)可(kě)以是(shì)iOS或OS X。因為( ≈wèi)如(rú)果需要(yào)針對(duì)不(bù)同的(de)平台,就•≈₹≠(jiù)要(yào)指定多(duō)個(gè)@avail₽♣ability屬性。
如(rú)果需要(yào)表示該函數(shù)在某個(g©≥₹è)給定的(de)平台完全不(bù)可(kě)用(yòng)時(shí),可$ε§(kě)以将第二個(gè)參數(shù)置為(≠§☆wèi)unavailable。此外(wài)≤♠↕σ,還(hái)可(kě)以用(yòng)introduced↕♦✘ ,deprecated和(hé)obsoleted來(lσ₽→ái)指定一(yī)個(gè)或是(shì)多(duō)個(gè)版本的(d Ωe)組合:obsoleted意味著(zhe)該項已經删除,depreca ✔ted僅僅表示如(rú)果使用(yòng)就(jiù)會(σ€αhuì)給予警告。最後你(nǐ)可(kě)以設置mesλ↓sage的(de)值,如(rú)果該項被使用(yòng)了εΩ(le)就(jiù)由編譯器(qì)輸出。下(xià)面是(shì)一(y∞≠βī)些(xiē)例子(zǐ):
正如(rú)該特性所描述的(de)那(nà)€★∏樣:編譯器(qì)可(kě)以假定這(zhè)個(gè)函數(shù)是(¥Ωshì)一(yī)個(gè)永遠(yuǎn)循環運行(xíng←"₹±)的(de)起點,例如(rú)while tru©'e { },或者假定是(shì)函數(shù)abort♣∑φ★或者exit進程的(de)情況。
評論者Marco Masser指出,如(rú)果調用(yòng)另一(♠≤∞yī)個(gè)被标志(zhì)為(wèi)@noreturn的(≤απ×de)函數(shù),那(nà)麽編譯器σ÷(qì)會(huì)忽略掉當前函數(shù)中缺失的(de•δ♠σ)返回值(missing return values),因為(wèi)編譯器♣φ(qì)理(lǐ)解程序的(de)控制(zhì)流。
@asmname
該屬性給出了(le)函數(shù)、方法或屬性實現>≠(xiàn)的(de)符号名稱。如(rú)果你(nǐ)已經知(zhī)道(dà©↔o)對(duì)應的(de)函數(shù)參數(shù)<©及其類型,那(nà)麽就(jiù)可(kě)以直接調用(yòng)S↕→εwift的(de)內(nèi)部标準庫函數(shù ♠$♥),甚至不(bù)用(yòng)頭文(wén)件(ji♥∑àn),也(yě)可(kě)以方便地(dì)調用(yòng)C語言編寫的(♦ de)函數(shù):
@unsafe_no_objc_tagge§↓ d_pointer
上(shàng)面這(zhè)個(gè)仍然是(•<'↑shì)個(gè)謎,但(dàn)我猜測它¶↔₩<是(shì)在告訴Swift與Objective-C聯系的(de≤₽)時(shí)候不(bù)要(yào)使用$✘(yòng)tagged pointer。
@semantics
這(zhè)又(yòu)是(shì)另一(yī)個(gè)謎。參數(shù →≤§)看(kàn)起來(lái)像是(shì)arr ±ay.mutate_unknown或array.init這(zhè)樣→$的(de)字符串數(shù)組。想必這(zhè)是(shì)要(yào)↓§告訴編譯器(qì)(或靜(jìng)态分(fēn)析器(qì))函數(s₹©hù)是(shì)如(rú)何工(gōng)作(zuò)的(d≥≠e)。
結論
誰還(hái)需要(yào)乏味老(lǎo)套的(de)@ob¥$&®jc和(hé)@autoclosure呢(ne)?還(hái)是(shì)算(π×®suàn)了(le)吧(ba)!
文(wén)章(zhāng)來(lái)源:Russ Bishop
作(zuò)者簡介:Russ Bishop 全能(néng)型程序員(yuán),使用(yòng)€→C#、Objective-C和(hé)SwiftΩ↔¶語言編程,開(kāi)發了(le)奇特的(γεde)應用(yòng)Storm Sim Free©>,博客:http://www.russbishop.net/。
