Swift基础篇——析构方法

析构方法

import Foundation

/* 析构方法 对象的内存被回收前夕被隐式调用方法,对应OC的dealloc方法 主要执行一些额外操作,例如释放一些持有资源,关闭文件,断开网络等 */

class FileHandler{
    var fd: Int32? // 文件描述符
    // 指定构造器
    init(path:String){
        // 需要打开的文件路径,打开方式(只读)
        // open方法是UNIX的方法
        let ret = open(path,O_RDONLY)
        if ret == -1{
            fd = nil
        }else{
            fd = ret
        }
        print("对象被创建")
    }
    // 析构方法
    deinit{
        // 关闭文件
        if let ofd = fd{
             close(ofd)
        }
        print("对象被销毁")
    }
}

var fh:FileHandler? = FileHandler(path: "/Users/Jonathan_Lee/Desktop/老员工奖.xlsx")
// 当对象没有任何强引用时会被销毁
fh = nil



/* 析构方法自动继承 父类的析构方法会被自动调用,不需要子类管理 */
class Person {
    var name:String
    init(name:String){
        self.name = name
        print("Person init")
    }
    deinit{
        print("Person deinit")
    }
}

class SuperMan: Person {
    var age:Int
    init(age:Int){
        .age = age
        super.init(name: "Swift")
        print("SuperMan init")
    }
    deinit{
        // 如果父类的析构方法不会被自动调用,那么我们还需要关心父类
        // 但是如果这样做对子类是比较痛苦的
        print("SuperMan deinit")
    }
}
var sm: SuperMan? = SuperMan(age: 30)
sm = nil

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...