Swift復(fù)習(xí)四&五

內(nèi)存分析

結(jié)構(gòu)體 類 值類型 引用類型

一: 匯編發(fā)展
截屏2022-04-14 上午8.24.57.png
二: 匯編語(yǔ)言種類
截屏2022-04-14 上午8.27.10.png
三: 常見(jiàn)指令
截屏2022-04-14 上午8.27.28.png
四: 寄存器
截屏2022-04-14 上午8.33.54.png
五: mov lea q是單位 8個(gè)bit
截屏2022-04-14 上午8.37.46.png
六: liulldb常見(jiàn)指令
截屏2022-04-14 上午9.08.27.png
七: 枚舉賦值內(nèi)存分析
截屏2022-04-13 下午6.01.30.png

截屏2022-04-14 上午9.27.46.png
八: 結(jié)構(gòu)體

1 定義結(jié)構(gòu)體
立即數(shù)大概等同于字面量


截屏2022-04-14 上午10.42.37.png
// 定義結(jié)構(gòu)體
   struct Date { 
        var year: Int   // 不設(shè)置默認(rèn)值是可以的
        var month: Int
        var day: Int
    }
 var date =  Date(year: 2001, month: 01, day: 01)
        print (date.year)
        print (date.month)
        print (date.day)
// 結(jié)構(gòu)體會(huì)自動(dòng)生成個(gè)初始化器

2 結(jié)構(gòu)體設(shè)置初始化值

不管設(shè)置不設(shè)置結(jié)構(gòu)體初始化值, 初始化時(shí)候必須保證所有值都初始化,否則編譯報(bào)錯(cuò)


截屏2022-04-14 上午10.45.05.png

3 結(jié)構(gòu)體設(shè)置可選類型 空也是默認(rèn)類型


截屏2022-04-14 上午10.46.31.png

4 自定義初始化器
你自己定義了, 就覆蓋了系統(tǒng)的, 只能調(diào)用自己的


截屏2022-04-14 上午10.48.37.png

5 結(jié)構(gòu)體內(nèi)存分析


截屏2022-04-14 上午10.54.16.png

// x.y各自占用8個(gè)字節(jié)


截屏2022-04-14 上午10.55.31.png

// x,y各自占用8個(gè)字節(jié), bool占用一個(gè) 合計(jì)17個(gè), 系統(tǒng)會(huì)有內(nèi)存對(duì)齊8位,補(bǔ)齊所以是24個(gè)

重點(diǎn): 結(jié)構(gòu)體初始化必須保證全部成員初始化完畢,類也如此

九: 類

1 初始化器, 不同于結(jié)構(gòu)體, 類不會(huì)自動(dòng)生成可以添加成員變量的初始化器


截屏2022-04-14 上午11.00.18.png

2 初始化類
1 類需要給所有變量指定默認(rèn)值 **重要
2 成員變量初始化完畢,會(huì)生產(chǎn)()初始化器
3 類初始化時(shí)候, 務(wù)必保證所有成員變量初始化完畢


截屏2022-04-14 上午11.02.20.png

3 結(jié)構(gòu)體和類的本質(zhì)區(qū)別
1 結(jié)構(gòu)體值類型, 賦值是內(nèi)容拷貝
2 類引用類型, 賦值是指針拷貝


截屏2022-04-14 下午1.32.48.png

分析:
1 函數(shù)地址存放在??臻g
2 point 值類型, 指針地址,內(nèi)容地址都存放在棧空間
3 size 引用類型, 指針地址存放在??臻g,內(nèi)容地址存放在堆空間

問(wèn)題, 結(jié)構(gòu)體存在哪? 看定義在哪?
1 定義在函數(shù)內(nèi): 棧空間
2 定義在類中: 堆空間
3 外面定義: 數(shù)據(jù)段

九: 值類型 引用類型

1值類型
值類型: 內(nèi)容拷貝, 新舊變量修改, 不互相影響


截屏2022-04-14 下午1.38.50.png

值類型賦值
編譯器優(yōu)化, 如果沒(méi)有修改操作 s1 s2指針指向的內(nèi)容地址, 可能是同一塊區(qū)域


截屏2022-04-14 下午1.41.37.png

截屏2022-04-14 下午1.43.52.png

2 引用類型
引用類型, 指針拷貝, 新變量修改會(huì)影響原變量的值


截屏2022-04-14 下午1.44.52.png

引用變量賦值


截屏2022-04-14 下午1.46.40.png

值類型& 引用類型 let


截屏2022-04-15 下午5.39.37.png

1 p: 屬于值類型, 成員變量存放在結(jié)構(gòu)體內(nèi)部, 結(jié)構(gòu)體占用16個(gè)字節(jié), 包含成員變量的內(nèi)存, p聲明let所以, 所以p的指向的內(nèi)存地址不能修改, p = Point(x:11, y:22) // 不能修改 x, y存放在結(jié)構(gòu)體內(nèi)部, p指向的內(nèi)存不能修改, 所以 x, y也不能修改
2 s屬于引用類型s占用8個(gè)字節(jié), 聲明let所以s指針指向的內(nèi)存地址不能修改, 但是width, height不存在s內(nèi)部, 所以可以修改
3 字符串, 數(shù)組都屬于值類型, 定義let內(nèi)存地址不能被修改

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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