Swift 教程
1. Swift 教程 2. Swift 环境搭建 3. Swift 基本语法 4. Swift 数据类型 5. Swift 变量 6. Swift 可选(Optionals)类型 7. Swift 常量 8. Swift 字面量 9. Swift 运算符 10. Swift 条件语句 11. Swift 循环 12. Swift 字符串 13. Swift 字符(Character) 14. Swift 数组 15. Swift 字典 16. Swift 函数 17. Swift 闭包 18. Swift 枚举 19. Swift 结构体 20. Swift 类 21. Swift 属性 22. Swift 方法 23. Swift 下标脚本 24. Swift 继承 25. Swift 构造过程 26. Swift 析构过程 27. Swift 可选链 28. Swift 自动引用计数(ARC) 29. Swift 类型转换 30. Swift 扩展 31. Swift 协议 32. Swift 泛型 33. Swift 访问控制

Swift 析构过程

Swift 析构过程

在一个类的实例被释放之前,析构函数被立即调用。用关键字deinit来标示析构函数,类似于初始化函数用init来标示。析构函数只适用于类类型。


析构过程原理

Swift 会自动释放不再需要的实例以释放资源。

Swift 通过自动引用计数(ARC)处理实例的内存管理。

通常当你的实例被释放时不需要手动地去清理。但是,当使用自己的资源时,你可能需要进行一些额外的清理。

例如,如果创建了一个自定义的类来打开一个文件,并写入一些数据,你可能需要在类实例被释放之前关闭该文件。

语法

在类的定义中,每个类最多只能有一个析构函数。析构函数不带任何参数,在写法上不带括号:


deinit {

    // 执行析构过程

}

实例


var counter = 0;  // 引用计数器

class BaseClass {

    init() {

        counter += 1;

    }

    deinit {

        counter -= 1;

    }

}



var show: BaseClass? = BaseClass()

print(counter)

show = nil

print(counter)

以上程序执行输出结果为:


1

0

当 show = nil 语句执行后,计算器减去 1,show 占用的内存就会释放。


var counter = 0;  // 引用计数器



class BaseClass {

    init() {

        counter += 1;

    }

    

    deinit {

        counter -= 1;

    }

}



var show: BaseClass? = BaseClass()



print(counter)

print(counter)

以上程序执行输出结果为:


1

1