Swift Day06 值類型 引用類型 閉包

一、值類型雹顺、引用類型

1. 用 let 修飾 結(jié)構(gòu)體實例的值類型類實例的引用類型 時,分別修改它們的成員變量廊遍,能編譯通過嗎嬉愧?
  • 核心點:理解 let 修飾的實例,其內(nèi)存是不可以改變的喉前。
    木有警告信息的就代表能編譯通過
2. 方法和函數(shù)的區(qū)別没酣?類、枚舉卵迂、結(jié)構(gòu)體都能定義方法嗎裕便?
  • 方法和函數(shù)沒區(qū)別,是同一個東西
  • 通常把定義在類见咒、枚舉偿衰、結(jié)構(gòu)體內(nèi)部的函數(shù),叫做方法
3. 思考下面這個方法show,它的本質(zhì)是什么下翎?在代碼段如何存儲的缤言?(非常重要)
class Point {
    var x = 11
    var y = 22
    func show() {
        print(x,y)
    }
}
var p = Point()
p.show()
  • 上面類中的 show 方法,最終會其實會轉(zhuǎn)變成類似下面的函數(shù)视事,存儲在代碼段
func show(self: Point) {
  print(self.x, self.y)
}
4. 定義一個全局變量let a = 10胆萧,在底層機器碼階段,只知道 a 的地址上是一個存儲著 10 這個數(shù)據(jù)俐东,程序是怎么標記它是 Int 類型呢跌穗?(一個困擾很久的問題 )
  • 其實對于這個問題,我一開始就進入了誤區(qū)虏辫。
  • 在機器碼階段蚌吸,它根本不關(guān)心 a 的地址上存儲的數(shù)據(jù)是什么類型的,也不會存儲任何類型相關(guān)的信息(類型在編譯階段應(yīng)該保證的事情乒裆,有個符號表
查閱資料`https://qastack.cn/software/380347/how-do-variables-in-c-store-their-type`
5. 我們?nèi)绾巫C明函數(shù)和方法(類中定義的函數(shù))套利,都是存放在代碼段呢推励?
示例代碼
  • 我們?nèi)缟蠄D所示打三個斷點鹤耍,進入匯編調(diào)試,可以拿到show 验辞、 show1 稿黄、 &a的地址值
  • 可以發(fā)現(xiàn) &a 是全局常量,存放在全局區(qū)跌造,地址值大于 show 和 show1
  • show 和 show1的地址值極其接近杆怕,所以大概率都存放在代碼區(qū)

二、閉包

1. 在 Swift 中有兩種方式定義函數(shù)壳贪,哪兩種陵珍?
  • 閉包表達式
  • func
閉包函數(shù)
2. 閉包表達式通常用于參數(shù)傳遞,可以進行簡寫(理解下列簡寫過程)
閉包表達式簡寫過程
3. 尾隨閉包表達式违施?為什么要有互纯?如何簡寫?
  • 如果將一個很長的閉包表達式作為函數(shù)的最后一個參數(shù)磕蒲,使用尾隨閉包可以增強函數(shù)的可讀性
  • 尾隨閉包是一個被書寫在函數(shù)調(diào)用括號外面(后面)的閉包表達式
尾隨閉包
  • 如果閉包表達式是函數(shù)唯一實參留潦,而且使用了尾隨閉包的語法,那就不需要在函數(shù)名后邊寫圓括號
尾隨閉包
4. 閉包(Closure)是什么辣往?
  • 一個函數(shù)和它捕獲的變量\常量環(huán)境組合起來兔院,稱為閉包
  • 一般指定義在函數(shù)內(nèi)部的函數(shù)
  • 一般它捕獲的是外層函數(shù)的局部變量\常量
5. 請問下面閉包輸出是什么?
閉包
  • 輸出:1 3 6 10 站削, 為什么呢坊萝?
  • num 被捕獲會被拷貝到堆內(nèi)存
6. 如何證明 num 被拷貝到了堆內(nèi)存呢?
斷點 1,沒有形成閉包的情況
  • 獲得以匯編代碼的形式看斷點代碼:


    斷點1的匯編屹堰,沒有形成閉包的情況
  • 斷點 2


    斷點 2肛冶,有閉包的情況
  • 獲得以匯編代碼的形式看斷點代碼:


    斷點 2 匯編,有閉包的情況
  • 對比斷點 1斷點 2的匯編扯键,我們可以發(fā)現(xiàn) 斷點 2 出現(xiàn)了 alloc 函數(shù)

  • alloc 函數(shù)往往意味著堆空間的開辟

  • 設(shè)置如下兩個斷點


    我們給代碼設(shè)置如下兩個斷點
  • var num = 0 這句代碼可以獲取 num 分配的內(nèi)存地址睦袖,通常放在 rax 寄存器中,然后我們取消這個斷點

    獲取 num 對象內(nèi)的值

獲取 堆內(nèi)存中 num 對象的值
  • 然后我們四次過掉剩下的斷點荣刑,分別進行打印馅笙,發(fā)現(xiàn)和我們猜想非常一致,num 的值也經(jīng)歷的 0 1 3 6 10的變化

  • 借此充分證明了 num 被拷貝到了堆內(nèi)存中厉亏,也解答了這個打印結(jié)果的問題

7. 如果上題中的 num 變成全局變量董习,會捕獲嗎?
  • 不會進行捕獲爱只,找不到任何 alloc 相關(guān)的函數(shù)
  • 其實也沒必要進行捕獲皿淋,因為可以正常訪問
8. 為什么可以把閉包想象成一個類的實例對象?
閉包 VS 類實例對象
9. 閉包閉包表達式有什么不同恬试?
  • 閉包表達式:用于定義函數(shù)的方式之一
  • 閉包:一個函數(shù)和它捕獲的變量\常量環(huán)境組合起來窝趣,稱為閉包
10. 一道綜合題,測試對閉包的理解训柴,請說出輸出值哑舒?
綜合題
  • 輸出:
答案
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幻馁,隨后出現(xiàn)的幾起案子洗鸵,更是在濱河造成了極大的恐慌,老刑警劉巖仗嗦,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膘滨,死亡現(xiàn)場離奇詭異,居然都是意外死亡稀拐,警方通過查閱死者的電腦和手機火邓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钩蚊,“玉大人贡翘,你說我怎么就攤上這事∨槁撸” “怎么了鸣驱?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝠咆。 經(jīng)常有香客問我踊东,道長北滥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任闸翅,我火速辦了婚禮再芋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坚冀。我一直安慰自己济赎,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布记某。 她就那樣靜靜地躺著司训,像睡著了一般。 火紅的嫁衣襯著肌膚如雪液南。 梳的紋絲不亂的頭發(fā)上壳猜,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音滑凉,去河邊找鬼统扳。 笑死,一個胖子當著我的面吹牛畅姊,可吹牛的內(nèi)容都是我干的咒钟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼涡匀,長吁一口氣:“原來是場噩夢啊……” “哼盯腌!你這毒婦竟也來了溉知?” 一聲冷哼從身側(cè)響起陨瘩,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎级乍,沒想到半個月后舌劳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡玫荣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年甚淡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捅厂。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡贯卦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焙贷,到底是詐尸還是另有隱情撵割,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布辙芍,位于F島的核電站啡彬,受9級特大地震影響羹与,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庶灿,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一纵搁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧往踢,春花似錦腾誉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至山上,卻和暖如春眼耀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佩憾。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工哮伟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妄帘。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓楞黄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抡驼。 傳聞我的和親對象是個殘疾皇子鬼廓,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容