天天看點

Swift實用小冊14:Destructor析構函數的使用

在本章中,你将學會​

​Destructor​

​析構函數的使用方法。

前言

和​

​Apple​

​​官網或者網上分享的教程類文章不同,我将以實際開發角度講述​

​Swift​

​​語言的一些概念和用法,友善大家更好地學習和掌握​

​Swift​

​語言。

這同時也是對自己學習​

​Swift​

​語言過程的知識整理。

如有錯誤,以你為準。

析構函數的定義

析構函數,也叫析構器。

它是在對象銷毀的時候自動調用,完成執行個體清理工作以釋放資源的函數。

在​

​Swift​

​​語言中,我們使用​

​Initializer​

​構造函數,在執行個體初始化時調用,以實作初始化的業務場景。

而當我們釋放執行個體時,我們還需要使用​

​Destructor​

​析構函數進行資源的釋放,達到記憶體優化的目的。

這就像是我們使用電腦一樣,打開應用時我們調用​

​Initializer​

​​構造函數初始化執行個體,然後切換應用的時候,系統就需要調用​

​Destructor​

​析構函數釋放執行個體。

與​

​Initializer​

​​構造函數不同點是,​

​Initializer​

​​構造函數可以在​

​Class​

​​類、​

​Struct​

​​結構體中使用,而​

​Destructor​

​​析構函數隻适用于​

​Class​

​類,每個類最多隻能有一個析構器,而且析構器不帶任何參數和圓括号。

析構函數的使用

我們建立一個​

​PlayGround​

​​項目,命名為​

​SwiftDestructor​

​。

Swift實用小冊14:Destructor析構函數的使用

使用​

​Initializer​

​​構造函數我們用到了​

​init()​

​​方法,使用​

​Destructor​

​​析構函數我們則需要用到​

​deinit​

​關鍵字。示例:

import UIKit

class appInformation {
    var appName: String
    var appVersion: String
    var appAuthor: String

    // 構造函數
    init(appName: String, appVersion: String, appAuthor: String) {
        self.appName = appName
        self.appVersion = appVersion
        self.appAuthor = appAuthor
        print("調用構造函數")
    }

    // 析構函數
    deinit {
        print("調用析構函數")
    }
}      
Swift實用小冊14:Destructor析構函數的使用

上述代碼中,我們定義了一個​

​appInformation​

​​類,我們聲明了三個存儲變量​

​appName​

​​、​

​appVersion​

​​、​

​appAuthor​

​,然後我們通過構造函數對執行個體初始化。

然後,我們使用​

​deinit​

​​關鍵字使用​

​Destructor​

​析構函數,當我們執行個體被釋放時,我們列印輸出下需要的結果。

調用的方法也比較簡單,示例:

var Destructor: appInformation? = appInformation(appName: "我的App", appVersion: "1.0.0", appAuthor: "文如秋雨")

Destructor = nil      
Swift實用小冊14:Destructor析構函數的使用

我們建立一個​

​appInformation​

​​執行個體時,我們會向​

​appInformation​

​​對象中給存儲變量指派,​

​appInformation​

​​執行個體存儲在一個​

​Destructor​

​的可選類型變量當中。

使用完成之後,我們讓聲明的可變類型變量​

​Destructor​

​​為​

​nil​

​​,這樣在執行後,析構函數​

​deinit​

​​會被立即調用列印輸出,​

​Destructor​

​占用的記憶體會随之釋放。

析構函數小結

之是以使用​

​Destructor​

​​析構函數,我們更多地考慮在多個執行個體被同時調用時,由于​

​Initializer​

​構造函數初始化帶來的資源占用,比如背景通知的移除。

這樣當我們調用執行個體并初始化後,就可以調用​

​Destructor​

​析構函數釋放執行個體所帶來的資源占用,進而避免不必要的資源浪費,優化記憶體管理。

本章代碼

import UIKit

class appInformation {
    var appName: String
    var appVersion: String
    var appAuthor: String

    // 構造函數
    init(appName: String, appVersion: String, appAuthor: String) {
        self.appName = appName
        self.appVersion = appVersion
        self.appAuthor = appAuthor
        print("調用構造函數")
    }

    // 析構函數
    deinit {
        print("調用析構函數")
    }
}

var Destructor: appInformation? = appInformation(appName: "我的App", appVersion: "1.0.0", appAuthor: "文如秋雨")

Destructor = nil