Swift中堆(heap)和棧(stack)的區(qū)別

1、內(nèi)存空間分為堆空間和棧空間

2、堆->引用類型(對象、函數(shù)、閉包) 棧->值類型(結(jié)構(gòu)體、枚舉、元組)

3、值類型賦值->深拷貝 引用類型賦值->淺拷貝

let a = 1
let c = a
// 值類型賦值會(huì)生成一個(gè)全新的c
// 引用類型賦值則是指向之前的對象的內(nèi)存地址

4、結(jié)構(gòu)體與類的區(qū)別

// 結(jié)構(gòu)體
struct personT{
    var  age = 10
    var name = "張三"
}

var pt = personT()
var pt1 = pt
pt1.age = 20
print(pt.age) //10

// 類
class personC{
    var  age = 10
    var name = "張三"
}
let pc = personC()
let pc1 = pc
pc1.age = 30
print(pc.age)//30

/* 分析
 定義兩個(gè)模型,一個(gè)是結(jié)構(gòu)體,一個(gè)是類
 結(jié)構(gòu)體是存在于棧中的值類型,賦值相當(dāng)于深拷貝即拷貝一個(gè)全新的模型
 類是存在于堆中的引用類型,賦值相當(dāng)于淺拷貝之前模型的內(nèi)存地址<所以定義模型時(shí)可以用let 定義 定義pc其實(shí)是personC() 的內(nèi)存地址 - 后續(xù)修改也是拿到內(nèi)存地主對應(yīng)的模型進(jìn)行修改>
 swift建議都使用struct, swift對結(jié)構(gòu)體已經(jīng)進(jìn)行了很大的優(yōu)化
 */
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容