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

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

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

前言

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

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

如有错误,以你为准。

析构函数的定义

析构函数,也叫析构器。

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

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

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

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

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

析构函数的使用

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

1.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("调用析构函数")
    }
}
复制代码

2.png

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

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

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

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

Destructor = nil
复制代码

3.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
复制代码

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

快来动手试试吧!

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

猜你喜欢

转载自juejin.im/post/7107619767359373326
今日推荐