Swift3.0学习笔记-DeInitialization

本文详细介绍了Swift语言中的析构函数(deinit)及其工作原理。包括自动引用计数(ARC)如何管理堆内存中的对象,以及局部变量超出作用域后的回收机制。还展示了析构函数的执行顺序,并强调了它只存在于类中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Deinitialization.html#//apple_ref/doc/uid/TP40014097-CH19-ID142


     类似于C++的析构函数、Java的finalize方法, Swift提供了析构函数deinit用于释放资源。 语法:

  1. deinit {
  2. // perform the deinitialization
  3. }

      Swift使用自动引用计数释放堆内存, 而栈内存是通过判断是否超过作用域。

class SuperClass {
    var count: Int
    init() {
        count = 0
        print("SuperClass init")
    }
    deinit {
        print("SuperClass deinit")
    }
}

class ExtClass: SuperClass {
    var name: String
    override init() {
        name = "zhangsan"
        super.init()
        print("Extclass init")
    }
    
    func showMsg() {
        print("ExtClass showMsg")
    }
    
    deinit {
        print("ExtClass deinit")
    }
}

func testMethod(){
    let obj = ExtClass()
    obj.showMsg()
}

testMethod()

SuperClass init

Extclass init

ExtClass showMsg

ExtClass deinit

SuperClass deist


       从上面示例可以看出在testMethod函数结束后, 即obj超出了作用域后释放资源。   


析构很简单, 注意以下几个特点:

1、在堆内存中使用自动引用计数, 引用个数为0时被回收;

2、局部变量超出作用域时被回收;

3、析构时序, 先释放派生类、再释放基类;

4、类都有析构函数,函数名称为deinit;

5、只有类有析构函数,结构体和枚举没有析构函数。(PS:知道为什么吗??? 前几篇博文已介绍过了, 类对象在堆里,结构体和枚举在栈里)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值