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

举报
文如秋雨 发表于 2022/08/30 12:59:47 2022/08/30
【摘要】 在本章中,你将学会Destructor析构函数的使用方法。前言和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。这同时也是对自己学习Swift语言过程的知识整理。如有错误,以你为准。析构函数的定义析构函数,也叫析构器。它是在对象销毁的时候自动调用,完成实例清理工作以释放资源的函数。在Swift语言中,我...
在本章中,你将学会Destructor析构函数的使用方法。

前言


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

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

如有错误,以你为准。

析构函数的定义


析构函数,也叫析构器。

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

在Swift语言中,我们使用Initializer构造函数,在实例初始化时调用,以实现初始化的业务场景。而当我们释放实例时,我们还需要使用Destructor析构函数进行资源的释放,达到内存优化的目的。

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

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

析构函数的使用


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




使用Initializer构造函数我们用到了init()方法,使用Destructor析构函数我们则需要用到deinit关键字。示例:

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




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

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

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

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

Destructor = nil


我们创建一个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

以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。