Swift实用小册14:Destructor析构函数的使用

简介: 析构函数,也叫析构器。它是在对象销毁的时候自动调用,完成实例清理工作以释放资源的函数。在Swift语言中,我们使用Initializer构造函数,在实例初始化时调用,以实现初始化的业务场景。

image.png

在本章中,你将学会Destructor析构函数的使用方法。

前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。

如有错误,以你为准。

析构函数的定义


析构函数,也叫析构器。

它是在对象销毁的时候自动调用,完成实例清理工作以释放资源的函数。

Swift语言中,我们使用Initializer构造函数,在实例初始化时调用,以实现初始化的业务场景。

而当我们释放实例时,我们还需要使用Destructor析构函数进行资源的释放,达到内存优化的目的。

这就像是我们使用电脑一样,打开应用时我们调用Initializer构造函数初始化实例,然后切换应用的时候,系统就需要调用Destructor析构函数释放实例。

Initializer构造函数不同点是,Initializer构造函数可以在Class类、Struct结构体中使用,而Destructor析构函数只适用于Class类,每个类最多只能有一个析构器,而且析构器不带任何参数和圆括号。

析构函数的使用


我们新建一个PlayGround项目,命名为SwiftDestructor

image.png

使用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("调用析构函数")
    }
}

image.png

上述代码中,我们定义了一个appInformation类,我们声明了三个存储变量appNameappVersionappAuthor,然后我们通过构造函数对实例初始化。

然后,我们使用deinit关键字使用Destructor析构函数,当我们实例被释放时,我们打印输出下需要的结果。

调用的方法也比较简单,示例:

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

image.png

我们创建一个appInformation实例时,我们会向appInformation对象中给存储变量赋值,appInformation实例存储在一个Destructor的可选类型变量当中。

使用完成之后,我们让声明的可变类型变量Destructornil,这样在执行后,析构函数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

以上就是本章的全部内容。

快来动手试试吧!

如果本专栏对你有帮助,不妨点赞、评论、关注~

相关文章
|
数据安全/隐私保护 Swift
Swift实用小册26: 正则表达式的使用
在本章中,你将学会常用的正则表达式的使用方法。
297 3
Swift实用小册26: 正则表达式的使用
|
存储 Swift
Swift实用小册25: 高级运算符之位运算符的使用
在本章中,你将学会高级运算符的位运算符的使用方法。
245 0
Swift实用小册25: 高级运算符之位运算符的使用
|
数据安全/隐私保护 Swift 索引
Swift实用小册24: AccessControl访问控制的使用
在本章中,你将学会AccessControl访问控制的使用方法。
195 0
Swift实用小册24: AccessControl访问控制的使用
|
Swift
Swift实用小册23: ARC自动引用计数机制的使用
在本章中,你将学会ARC自动引用计数机制的使用方法。
188 0
Swift实用小册23: ARC自动引用计数机制的使用
|
Swift
Swift实用小册22: OpaqueTypes不透明类型的使用
在本章中,你将学会OpaqueTypes不透明类型的使用方法。
286 0
Swift实用小册22: OpaqueTypes不透明类型的使用
|
Swift
Swift实用小册21: Generics泛型的使用
在本章中,你将学会Generics泛型的使用方法。
175 0
Swift实用小册21: Generics泛型的使用
|
存储 前端开发 Swift
Swift实用小册20: Protocol协议的使用
在本章中,你将学会Protocol协议的使用方法。
268 0
Swift实用小册20: Protocol协议的使用
|
存储 前端开发 Swift
Swift实用小册19:Extension扩展的使用
在本章中,你将学会Extension扩展的使用方法。
397 0
Swift实用小册19:Extension扩展的使用
|
Swift
Swift实用小册18:NestedTypes嵌套类型的使用
在本章中,你将学会NestedTypes嵌套类型的使用方法。
218 0
Swift实用小册18:NestedTypes嵌套类型的使用
|
存储 Swift
Swift实用小册17:类型检查和类型转换
在本章中,你将学会类型检查和类型转换的使用方法。
166 0
Swift实用小册17:类型检查和类型转换