iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0

今天繼續來聊聊Class跟Struct

  • Swift 中以記憶體配置的方式不同來說,可以分為值型別(value type)參考型別(reference type)
  • 記憶體分成 heap 和 stack 兩塊。
  • class 物件是 reference type,會被儲存在 heap
  • struct 物件是 value type,會被存在 stack。
  • 值型別(value type)會儲存實際的值。
  • 參考型別(reference type)只會儲存其在記憶體空間中配置的位置。
  • Value Type 每個實例保存資料一份獨立的備份。當這類型別被指派給一個變數或常數、或是被傳送到函式時,就會創建一個新的實例(備份)。
struct Struct{
    var point = 0
}
var structPosition = Struct()
var structPosition2 = structPosition
structPosition2.point = 10

print(structPosition.point) //0
print(structPosition2.point) //10
  • Reference Type每個實例共享記憶體空間中配置的位置。當這類型別被初始化、被指派給一個變數或常數、或者是被傳送到函式時,就會回傳參考到相同的實例。
class Class{
    var point = 0
}
var classPosition = Class()
var classPosition2 = classPosition
classPosition2.point = 10

print(classPosition.point)  //10
print(classPosition2.point) //10

記憶體位置

  • 印出Struct記憶體位置
  • 可以看到兩個記憶體位置是不同的,更動值的時候不會影響到

  • 印出Class記憶體位置
  • 兩個記憶體位置為相同,兩個值(value)都參考到同一記憶體位置,所以值會互相影響

結語

Class與Struct有很多相似的地方,要如何決定每個資料建構要定義為哪個

  • 需要封裝的資料量較少且較簡單
  • 在建構值或傳遞實例時,有特別需求這個資料是會被拷貝而不是參考
  • 不需要去繼承另一個已存在型別的屬性或行為

以上情況都符合定義Struct,而其他資料結構可定義為Class


上一篇
Swift-Class & Struct
下一篇
Swift-View生命週期 (Life Cycle)
系列文
Swift!從新手到微上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言