- 面試常問題
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 // 小花也突然有了五隻腳
嘿~小樹沒有跟小花一樣有五隻腳耶
ㄛ ~原來是因為指向不同的記憶體
好的,那今天就先到這邊,掰掰。