Swift — Class & Struct 差異

Wayne Hsu
Feb 18, 2021

--

- 面試常問題

class 和 struct 雖然有著許多共同的性質,Ex: 都可實作 protocol 、都可使用extension ,或是擴充 method等等,但還是不能分不清楚他們之間的差別。

他們倆最大的差別不外乎是 ”class 是 Reference Type”,也就是 “Copy by Reference”,struct 是 Value Type,也就是Copy by value。而在記憶體儲存上也有不一樣的地方,class 會存放在記憶體的 “heap” 裡面,而 struct 則存在 “stack”。

下面來介紹 Copy by Reference 與 Copy by value,有者什麼樣的差別:

Copy by Reference: 不會產生新的實例,共享同一個記憶體配置。

Ex:

class Dog {  // 現在有一個 Dog的class
var legs = 4
}
var black = Dog() // 生成一個小黑的狗狗
var white = black // 小白跟小黑一樣也是狗狗
black.legs = 5 // 小黑突然有了5隻腳

咦~小白怎麼也有五隻腳

ㄛ ~原來小黑跟小白都指向同一個記憶體

Copy by value: 會產生新的實體,讓我們看看下面範例。

struct Cat {  // 換成貓的struct
var legs = 4
}
var flower = Cat() // 小花var tree = flower // 小樹跟小花一樣都是貓flower.legs = 5 // 小花也突然有了五隻腳

嘿~小樹沒有跟小花一樣有五隻腳耶

ㄛ ~原來是因為指向不同的記憶體

好的,那今天就先到這邊,掰掰。

--

--

Wayne Hsu
Wayne Hsu

No responses yet