1昼汗、結(jié)構(gòu)體和類鬼雀,在創(chuàng)建實(shí)例過(guò)程中源哩,需要進(jìn)行一些初始化的工作,這個(gè)過(guò)程:構(gòu)造過(guò)程励烦。
實(shí)例最后被釋放的時(shí)候坛掠,需要進(jìn)行一些清除資源的工作治筒,這個(gè)過(guò)程:析構(gòu)過(guò)程舷蒲。
2、構(gòu)造函數(shù):init方法句灌,沒(méi)有返回值欠拾,可以重載,在構(gòu)造函數(shù)重載的情況下资昧,運(yùn)行環(huán)境可以根據(jù)它的參數(shù)標(biāo)簽荆忍、參數(shù)列表,調(diào)用合適的構(gòu)造函數(shù)叽唱。
class Rectangle {
var width: Double = 0.0
var height: Double = 0.0
init() {
}
}
struct Rectangle {
var width: Double = 0.0
var height: Double = 0.0
init() {
}
init(width: Double, height: Double) {
self.width = width
self.height = height
}
}
3微宝、構(gòu)造函數(shù)主要作用:初始化實(shí)例,初始化存儲(chǔ)屬性和其他的初始化镶摘,如果在構(gòu)造函數(shù)中初始化存儲(chǔ)屬性岳守,那么定義時(shí)就不需要初始化
class Rectangle {
var width: Double
var height: Double
init() {
width = 0.0
height = 0.0
}
}
存儲(chǔ)屬性必須初始化,在構(gòu)造函數(shù)中初始化涝缝,或者在定義的時(shí)候初始化蒙袍;計(jì)算屬性不保存數(shù)據(jù)害幅,不需要初始化;構(gòu)造函數(shù)不能初始化靜態(tài)屬性
構(gòu)造函數(shù)中常量屬性以现,可以不在定義的時(shí)候賦值约啊,可以在構(gòu)造函數(shù)中賦值
4、構(gòu)造函數(shù)中的參數(shù)佣赖,可以直接作為參數(shù)標(biāo)簽使用
5恰矩、結(jié)構(gòu)體有一種特殊的寫法:
struct RectangleC {
var width: Double = 0.0
var height: Double = 0.0
}
var rectc = RectangleC(width: 320, height: 480)
按照從上到下的順序,把屬性名作為參數(shù)標(biāo)簽
6憎蛤、構(gòu)造函數(shù)代理:為了減少多個(gè)構(gòu)造函數(shù)間的代碼重復(fù)外傅,在定義構(gòu)造函數(shù)的時(shí)候,可以通過(guò)調(diào)用其他構(gòu)造函數(shù)俩檬,來(lái)完成實(shí)例的部分構(gòu)造過(guò)程萎胰。
7、結(jié)構(gòu)體構(gòu)造函數(shù)代理:self.init
struct Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
init() {
self.init(width: 640.0, height: 940.0)
}
init(length: Double) {
self.init(width: length, height: length)
}
}
8棚辽、類構(gòu)造函數(shù)代理:
橫向代理:類似于結(jié)構(gòu)體類型構(gòu)造函數(shù)代理技竟,發(fā)生在同一類內(nèi)部屈藐,便利構(gòu)造函數(shù)
向上代理:發(fā)生在繼承情況下榔组,在子類構(gòu)造過(guò)程中,要先調(diào)用父類構(gòu)造函數(shù)联逻,初始化父類的存儲(chǔ)屬性搓扯,指定構(gòu)造函數(shù)
convenience init() {} 表示便利構(gòu)造函數(shù)
9、析構(gòu)函數(shù)
deinit遣妥,沒(méi)有返回值擅编,沒(méi)有參數(shù),沒(méi)有小括號(hào)箫踩,不能重載 ?deinit{}
析構(gòu)函數(shù),只適用于類谭贪,不適用于枚舉和結(jié)構(gòu)體
存在析構(gòu)函數(shù)境钟,創(chuàng)建實(shí)例時(shí),要用俭识?慨削,這樣才能賦值nil,析構(gòu)函數(shù)的調(diào)用是使實(shí)例被賦值nil
var rect1: Rectangle? = Rectangel(width: 320, height: 480) ?print()rect1 = nil觸發(fā)析構(gòu)函數(shù)的條件