Swift析构器

Swift中的析构器的作用类似C++中的析构器,用deinit关键字,在实例被销毁之前被自动调用的,主要作用是释放一些资源,比如你之前打开了一个数据库,并写入一些数据,在类实例被释放之前需要关闭该数据库。

     deinit{
        //释放一些资源
      }

注意:

  1. 析构器只能在类(class)中使用
  2. 无需使用func关键字也没有括号( )
  3. 析构函数不能有返回值和参数
  4. 不能手动调用析构函数,有系统自动调用

先列举一个简单的例子,清晰的看一下流程功能:

    class Father {
    var age:Int
    var height:Int
    init(age:Int,height:Int)
    {
     self.age=age
     self.height=age
    }
     deinit
    {
    print("父类实例即将释放----")
        print("父亲的年龄为:\(age)")
    }
    }
    class Child:Father{
    var sex:String

       init(age:Int,height:Int,sex:String)
    {
        self.sex=sex
        super.init(age: age, height: age)
    }
   deinit
    {
    print("子类实例即将释放----")
        print("孩子的性别为:\(sex)")
    }
    }
    调用:
    var child:Child?=Child(age: 45, height: 175, sex: "男")
    print("\(child!.sex)")

   打印结果:

      男
     子类实例即将释放----
     父类实例即将释放----

通过上面的结果可以得出结论:

* 子类实例释放之前自动调用子类的析构器,最后再自动调用父类的析构器
* 调用析构器是在释放实例销毁之前,所以可以在析构器里面是可以调用实力存储属性的
* 即使子类没有析构器但仍然会调用父类的析构器(前提是父类析构器存在)
时间: 2024-12-21 17:44:26

Swift析构器的相关文章

Swift构造器(Initializer)与析构器(Deinitializer)

为了初始化结构体和类等类型的实例属性. 默认构造器 struct Fahrenheit { var temperature: Doubleinit(){ temperature = 32.0 } } var f = Fahrenheit() //调用默认构造器 init() ,没有参数 没有返回值. println("The default temperature is \(f.temperature)°Fahrenheit") // prints "The default

垃圾回收机制及析构器原理解析

前言 当学习到Web API中摸索原理时,对于其中有关垃圾回收只是有点印象并未深入去了解其原理并且对索引器用的也很少,所以利用放假期间好好回顾下已经忘记或者遗漏的知识,温故而知新大概就是这道理吧,虽然园子中关于这两者的文章也是多不胜数,但笔者也有自己独特的见解. 垃圾回收机制 引言 我们知道.NET Framework中的对象是创建在托管堆中的,但是像C.C++等其他底层语言中的对象是创建在非托管堆中的,所以在这类语言中就会出现编程人员忘记去释放已经没有用的对象,同时编程人员也可能会去试图访问已

全国首发-Swift视频教程-共68课时(已更新完成)

视频教程地址: 苹果Swift编程语言开发指南(上) http://v.51work6.com/viewCourseDetail.do?courseId=799262 苹果Swift编程语言开发指南(下) http://v.51work6.com/viewCourseDetail.do?courseId=799438 Swift是苹果2014WWDC大会发布的一门新的苹果开发语言,苹果耗时4年完成这门开发语言.本教程介绍了Swift语言开发的方方面面,包含:Swift语言的常量与变量.Swift

Swift结构体与类

在面向过程的编程语言(如C语言)中,结构体用得比较多,但是面向对象之后,如在C++和Objective-C中,结构体已经很少使用了.这是因为结构体能够做的事情,类完全可以取而代之.而Swift语言却非常重视结构体,把结构体作为实现面向对象的重要手段.Swift中的结构体与C++和Objective-C中的结构体有很大的差别,C++和Objective-C中的结构体只能定义一组相关的成员变量,而Swift中的结构体不仅可以定义成员变量(属性),还可以定义成员方法.因此,我们可以把结构体看做是一种轻

Swift中文教程(五)对象和类

Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: class Shape { var numberOfSides = 0 func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } } 练习: 用let关键字添加一个常量属性,添

《Swift开发指南》国内第一本Swift图书上市了

<Swift开发指南>国内第一本Swift图书上市了 既<苹果Swift编程语言开发指南>视频教程地址:智捷在线课堂,推出以来,受到大家高度关注,再接再厉推出: 国内第一本Swift开发图书:配有同步习题.同步视频教程,并全程展现即将上线的iPhone计算器项目: 分层架构设计解决Swift与Objective-C混合搭配问题:我们会及时更新本书版本欢迎大家关注. 新书预售地址: 京东预售:http://item.jd.com/11516346.html当当预售:http://pr

Swift内存管理-示例讲解

具体而言,Swift中的ARC内存管理是对引用类型的管理,即对类所创建的对象采用ARC管理.而对于值类型,如整型.浮点型.布尔型.字符串.元组.集合.枚举和结构体等,是由处理器自动管理的,程序员不需要管理它们的内存.一.引用计数每个Swift类创建的对象都有一个内部计数器,这个计数器跟踪对象的引用次数,称为引用计数(Reference Count,简称RC).当对象被创建的时候,引用计数为1,每次对象被引用的时候会使其引用计数加1,如果不需要的时候,对象引用断开(赋值为nil),其引用计数减1.

[译] Swift + 关键字(V 3.0.1)

本文讲的是[译] Swift + 关键字(V 3.0.1), A Tell All 有句话以前说过,现在我要再次提一下,一个优秀的匠人,他(她)的工具同样优秀.当我们一丝不苟地去使用这些工具时,它们就会带我们到想去的地方,或者完成我们的梦寐以求的作品. 我并没有贬义的意思,因为总是有很多东西要学.所以今天,我们来看看 Swift 中的每一个关键字(v 3.0.1),看看它为我们每个人提供的代码,我们每个人预定的工具的名字. 有一些是很简单的,有一些是晦涩难懂的,也有一些是有点能认出来的.但是他们

Object-C---&amp;gt;Swift之(八)类和结构体

在Swift中类和结构体有高度的相似性.二者主要区别是: 1. 结构体不支持继承 2. 结构体不支持定义析构器 3. 结构体是值类型,而类是引用类型 定义类语法格式: [修饰符]class 类名 { 零个到多个构造器 零个到多个属性 零个到多个方法 零个到多个下标 } 对一个类定义而言,包括3种最常见的成员:构造器.属性.方法,如果程序员没有为一个类提供构造器,则系统会为该类提供一个默认.无参数的构造器.一旦程序员为该类提供了构造器,则系统不会再为该类提供默认的构造器. #定义结构体语法格式: