Value / Reference Type

當操作任何物件時就是在操作記憶體,到底是如何運作的呢?

三種記憶體區間

三大區塊

1. static memory:靜態變數(static),永遠存在的變數(ex. Swift中用特殊機制Lazy初始化)

2. stack memory:變數在方法結束會自動回收

3. heap memory:變數由使用者自己決定何時回收(ex. Swift中用ARC處理)

記憶體區塊的操作

Swift 裡的 Value Type 與 Reference Type

  • Value Type:Int, String, Array, Dict, Enum, Struct

    • 記錄在 stack memory

    • 因為變數在方法結束會自動回收

    • 所以賦值或是傳值都是"新的一份資料",即為 Pass By Value

  • Reference Type:Class, Closure

    • 記錄位址在stack memory,紀錄資料在heap memory

    • 因為變數在方法結束不會回收,是利用ARC回收

    • 所以賦值或是傳值都是"同一份資料",即為 Pass By Reference

  • Value Type 和 Reference Type 都只是基於操作記憶體的方式不同,而產生的簡稱

  • Value Type 和 Reference Type 萬年爭議哪個好?操作安全性?記憶體消耗?

課後練習題(可以在playground上跑)

Last updated

Was this helpful?