zoukankan      html  css  js  c++  java
  • swift基础语法(29- 析构方法)

    析构方法
    对象的内存被回收前夕被隐式调用的方法, 对应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/xiaoyang/Desktop/xmg.jpg")
    当对象没有任何强引用时会被销毁
    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){
            self.age = age
            super.init(name: "qbs")
            print("SuperMan init")
        }
        deinit{
            如果父类的析构方法不会被自动调用,那么我们还需要关心父类
            但是如果这样做对子类是比较痛苦的
            print("SuperMan deinit")
        }
    }
    var sm: SuperMan? = SuperMan(age: 30)
    sm = nil
    输出结果:
    Person init
    SuperMan init
    SuperMan deinit
    Person deinit
  • 相关阅读:
    circle loss:统一softmax CrossEntropy loss 和 triplet loss / 2020
    针对PPO的一些Code-level性能优化技巧
    【李南江】从零玩转TypeScript
    Python编程题16--最长不重复子串
    Python编程题15--RGB字符串排序
    Maven教程
    python的pandas处理txt文件
    python将JPG图片转换为PDF
    使用svd对信号矩阵降噪
    使用ffmpeg命令处理媒体文件
  • 原文地址:https://www.cnblogs.com/jordanYang/p/5378576.html
Copyright © 2011-2022 走看看