這篇文章將為大家詳細講解有關(guān)Swift性能高效的原因有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

自從2014年Apple發(fā)布Swift語言以來,歷時六年多,Swift已經(jīng)發(fā)布到5.3版本,在5.0版本已經(jīng)ABI stability,5.2版本也已經(jīng)module stability,不管是語言還是基礎(chǔ)庫都日趨穩(wěn)定,目前國內(nèi)外大廠也都積極擁抱Swift陣營。
絕大多數(shù)公司選擇Swift語言開發(fā)iOS應(yīng)用,主要原因是因為Swift相比Objc有更快的運行效率,更加安全的類型檢測,更多現(xiàn)代語言的特性提升開發(fā)效率;這一系列的優(yōu)點使Swift語言的熱度越來越高。
大多數(shù)人知道Swift語言相比于Objc語言運行效率更高,但是卻不知道為什么效率更高,在這里我們Swift編譯層探討一下Swift語言高效的原因。
更加高效的數(shù)據(jù)類型
在開始討論Swift數(shù)據(jù)類型之前,我們先討論一下Swift的函數(shù)派發(fā)機制;
靜態(tài)派發(fā)、動態(tài)派發(fā)、消息派發(fā)(static dispatch、dynamic dispatch、message dispatch)
動態(tài)派發(fā)(dynamic dispatch): 動態(tài)派發(fā)是指編譯期無法確定應(yīng)該調(diào)用哪個方法,需要在運行時才能確定方法的調(diào)用。
靜態(tài)派發(fā)(static dispatch):是在編譯期就能確定的調(diào)用方法的派發(fā)方式。
除了上面兩種方式之外,在Swift里面還會使用Objc的消息派發(fā)(message dispatch))機制;Objc采用了運行時采用obj_msgsend進行消息派發(fā),所以O(shè)bjc的一些動態(tài)特性在Swift里面也可以被限制的使用。
靜態(tài)派發(fā)相比于動態(tài)派發(fā)更快,而且靜態(tài)派發(fā)還會進行內(nèi)聯(lián)等一些優(yōu)化,減少函數(shù)的尋址及內(nèi)存地址的偏移計算等一系列操作,使函數(shù)的執(zhí)行速度更快,性能更高。
數(shù)據(jù)類型(struct/class)
我們都知道,內(nèi)存分配可以分為堆區(qū)(Heap)和棧區(qū)(Stack)。由于棧區(qū)內(nèi)存是連續(xù)的,內(nèi)存的分配和銷毀是通過入棧和出棧操作進行的,速度要高于堆區(qū)。堆區(qū)存儲高級數(shù)據(jù)類型,在數(shù)據(jù)初始化時,查找沒有使用的內(nèi)存,銷毀時再從內(nèi)存中清除,所以堆區(qū)的數(shù)據(jù)存儲不一定是連續(xù)的。
類(class)和結(jié)構(gòu)體(struct)在內(nèi)存分配上是不同的,基本數(shù)據(jù)類型和結(jié)構(gòu)體默認分配在棧區(qū),而像類這種高級數(shù)據(jù)類型存儲在堆區(qū),且堆區(qū)數(shù)據(jù)存儲不是線程安全的,在頻繁的數(shù)據(jù)讀寫操作時,要進行加鎖操作。
我們在swift文檔里面能看到對結(jié)構(gòu)的描述,結(jié)構(gòu)體是值類型(Value Type),當值類型的數(shù)據(jù)賦值給一個變量或常量,或者傳遞給一個函數(shù)時,是值拷貝;
例如:
struct Resolution {
var width = 0
var height = 0
}
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema.width = 2048
print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"
print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"
名稱欄目:Swift性能高效的原因有哪些-創(chuàng)新互聯(lián)
分享路徑:http://www.yijiale78.com/article18/doccgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站內(nèi)鏈、微信公眾號、定制網(wǎng)站、虛擬主機、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)