/*
swift記憶體管理:
管理引用型別的記憶體, 不會管理值型別, 值型別不需要管理
記憶體管理原則: 當沒有任何強引用指向物件, 系統會自動銷毀物件
(預設情況下所有的引用都是強引用)
如果做到該原則: arc
*/class
person
deinit
}var p:
person?=
person
(name:
"gezi"
)//p = nil
/*weak弱引用
*/class
person2
deinit
}// 強引用, 引用計數+1
var strongp =
person2
(name:
"gezi"
)// 1
var strongp2 = strongp // 2
// 弱引用, 引用計數不變
// 如果利用weak修飾變數, 當物件釋放後會自動將變數設定為nil
// 所以利用weak修飾的變數必定是乙個可選型別, 因為只有可選型別才能設定為nil
weak
var weakp:
person2?=
person2
(name:
"gezi")if
let p = weakp
else
/*unowned無主引用 , 相當於oc unsafe_unretained
unowned和weak的區別:
1.利用unowned修飾的變數, 物件釋放後不會設定為nil. 不安全
利用weak修飾的變數, 物件釋放後會設定為nil
2.利用unowned修飾的變數, 不是可選型別
利用weak修飾的變數, 是可選型別
什麼時候使用weak?
什麼時候使用unowned?
*/class
person3
deinit
}unowned
var weakp3:
person3
=person3
(name:
"gezi")/*
迴圈引用
arc不是萬能的, 它可以很好的解決記憶體問題, 但是在某些場合不能很好的解決記憶體洩露問題
例如兩個或多個物件之間的迴圈引用問題
*/class
person4
deinit
}class
apartment
deinit
}var p4:
person4?=
person4
(name:
"gezi"
)var a4:
apartment?=
apartment
(number:
888)
p4!.apartment = a4 // 人有一套公寓
a4!.tenant = p4!
// 公寓中住著乙個人
// 兩個物件沒有被銷毀, 但是我們沒有辦法訪問他們了. 記憶體洩露
p4 =
nila4 =
nilclass
person5
deinit
}class
creditcard
deinit
}var p5:
person5?=
person5
(name:
"gezi"
)var cc:
creditcard?=
creditcard
(number:
8888888
, person: p5!
)p5 =
nilcc =
nil
二十二 Swift5 0之 列舉
全系列導航 swift5.0 系列部落格索引 swift列舉 swift中的列舉比oc中的列舉強大,因為swift中的列舉是一等型別,它可以像類和結構體一樣增加屬性和方法 格式 enum method enum method 可以使用列舉型別變數或常量接收列舉值 var m method add 注...
四 Swift 5 0之 Bool型別
全系列導航 swift5.0 系列部落格索引 c語言和oc並沒有真正的bool型別 c語言的bool型別非0即真 oc語言的bool型別是typedef signed char bool swift引入了真正的bool型別 bool true false let isopen bool true l...
六 Swift5 0之 可選值
全系列導航 swift5.0 系列部落格索引 可選值 optionals有兩種狀態 1.有值 2.沒有值,沒有值就是nil 有值 var optvalue1 int?9 沒有值 var optvalue2 int?var optvalue3 int?nil 可選值可以利用if語句來進行判斷 var ...