iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 1
0
Software Development

Swift零基礎實作旅遊景點app系列 第 1

Swift從零開始-Day1: 學習Swift記憶體管理

分類:基本知識學習


1. Value Type v.s Referencece Type

http://howtocodeiosapps.com/index.php/2016/10/24/value-vs-reference-types-in-swift/

資料大致上分成Value Type及Reference Type兩大類,常見的型別如Int, Float, Boolean...是以Struct來定義的,所以都是屬於Value Type。而Class, function, Closure則是屬於Reference Type。

1-1. Value Type的特性

  • Value Type是獨立記憶體的,所以如果 把一個值assign給另一個變數時,是完全複製的,在記憶體中是以Stack (於第2部分說明)的方式進行配置。Ex: 如下圖

學會 Swift 的關鍵:Value Type vs. Reference Type – WuFeng Chiang – Medium
可以看到把number1 分配給number2時,記憶體存放位置是不同的,所以更動number1的值不會影響到number2。

1-2. Reference Type的特性

  • Reference Type的資料是被放到Heap中的,且記憶體位置會指向同個地方,所以如果更動myCoordinate的X 座標,這樣yourCoordinate的X座標也會變動,如下圖。

2. Stack 及 Heap學習

2-1. Stack概念學習:

可以想像成是一個單一開口的箱子,Value Type的值會依宣告順序一塊一塊放在上面(向下排列),在上面的範例中number1宣告完後再宣告number2,在Stack的位置如下圖。

http://www.andrew.cmu.edu/course/15-440-s12/applications/ln/proccontext.jpg

2-2. Stack, Heap關聯

https://manojbhoir.wordpress.com/2015/09/29/value-type-and-reference-types/

現在如果創建一個Class Person,此class內有firstName及lastName的屬性,這些屬性會放在Heap(樹狀結構)中,當今天我們實體化此類別var student = Person(),則變數student是放在Stack中(引用Person這個類別存在Stack)。

class Person {
	var firstName = "Edward"
	var lastName  = "Chen"
}`

var student = Person()

關聯性如下圖所示

PS: 如果在class裡面有宣告static屬性,則此屬性會存在另外一個記憶體區,不屬於Stack及Heap,額外的記憶體區(有人翻成靜態記憶體區)。


下一篇
Swift從零開始-Day2: ViewController Lifecycle與App LifeCycle學習
系列文
Swift零基礎實作旅遊景點app30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言