与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程。在析构过程中也会调用一种特殊的方法deinit,称为析构函数。析构函数deinit没有返回值,也没有参数,也不需要参数的小括号,所以不能重载。

下面看看示例代码:

  1. class Rectangle {
  2. var width: Double
  3. var height: Double
  4. init(width: Double, height: Double) {
  5. self.width   = width
  6. self.height  = height
  7. }
  8. init(W width: Double,H height: Double) {
  9. self.width   = width
  10. self.height  = height
  11. }
  12. deinit {              //定义了析构函数
  13. print("调用析构函数...")
  14. self.width = 0.0
  15. self.height  = 0.0
  16. }
  17. }
  18. var rectc1: Rectangle? = Rectangle(width: 320, height: 480) //实例rectc1
  19. print("长方形:\(rectc1!.width) x \(rectc1!.height)")
  20. rectc1 = nil                     //触发调用析构函数的条件
  21. var rectc2: Rectangle? = Rectangle(W: 320, H: 480)       //实例rectc2
  22. print("长方形:\(rectc2!.width) x \(rectc2!.height)")
  23. rectc2 = nil                     //触发调用析构函数的条件

析构函数的调用是在实例被赋值为nil,表示实例需要释放内存,在释放之前先调用析构函数,然后再释放。

运行结果如下:

长方形:320.0 x 480.0

调用析构函数...

长方形:320.0 x 480.0

调用析构函数...

析构函数只适用于类,不能适用于枚举和结构体。类似的方法在C++中也称为析构函数,不同的是,C++中的析构函数常常用来释放不再需要的内存资源。而在Swift 中,内存管理采用自动引用计数(ARC),不需要在析构函数释放不需要的实例内存资源,但是还是有一些清除工作需要在这里完成,如关闭文件等处理。

Swift—析构函数-备的更多相关文章

  1. Swift—静态方法-备

    静态方法与静态属性类似,Swift中定义了静态方法,也称为类型方法.静态方法的定义与静态属性类似,枚举和结构体的静态方法使用的关键字是static:类静态方法使用的关键字是class或static,如 ...

  2. Swift—下标-备

    看下面的示例代码是不是使用过: var studentList: String[]  = ["张三","李四","王五"] studentL ...

  3. swift闭包-备

    我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swift中的闭包类似于Objective-C中的代码块.J ...

  4. Swift—重写-备

    ========================= 重写实例属性 我们可以在子类中重写从父类继承来的属性,属性有实例属性和静态属性之分,他们在具体实现也是不同的. 实例属性的重写一方面可以重写gett ...

  5. Swift常用语法示例代码(二)

    此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上Th ...

  6. 《从零开始学Swift》学习笔记(Day 40)——析构函数

    原创文章,欢迎转载.转载请注明:关东升的博客 与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程.在析构过程中也会调用一种特殊的方法deinit,称为析构函数.析构函数dein ...

  7. Swift 备忘单和快速参考

    Variables var myInt = var myExplicitInt: Int = // explicit type var x = , y = , z = // declare multi ...

  8. Using Swift with Cocoa and Objective-C(Swift 2.0版):开始--基础设置-备

    这是一个正在研发的API或技术的概要文件,苹果公司提供这些信息主要是为了帮助你通过苹果产品使用这些技术或者编程接口而做好计划,该信息有可能会在未来发生改变,本文当中提到的软件应该以最终发布的操作系统测 ...

  9. Swift—Cocoa Touch设计模式-备

    目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制.   问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击 ...

随机推荐

  1. 前端问题——png图片在IE6下透明失效,解决办法

    今天,一位同事问我问题,png 图片在IE6下透明背景失效. 解决办法,在网上查了很多,最后还是采用两种方案来解决这个问题 1.把这个网页的png格式图片变更为gif格式的图片.问题解决 2.就是让这 ...

  2. js接收后台时间数据变成秒处理为正常格式

    在做项目时,后台数据json传到前台ajax,数据中包含DateTime格式的数据,前台js操作时间数据的时候却发现日期变成了秒格式 js能对日期操作的那些方法均不能使用了,例如getDay()等等, ...

  3. bda_百度百科

    bda_百度百科 bda

  4. Controlling How NSThread and NSRunLoop Exit

    http://shaheengandhi.com/controlling-thread-exit/ While most concurrency can be dealt with by using ...

  5. 深入理解object C中复制对象的用法(二)

    第五.对象的自定义拷贝 对象拥有复制特性,必须实现NSCopying,NSMutableCopying协议,实现该协议的copyWithZone方法和mutableCopyWithZone方法 深拷贝 ...

  6. SheetOffice控件使用分享

    1.  控件属性及说明 Template:套用的模板目录(套用模板会使用到) 模板中必须包含书签: Body,这个是在代码中写死了的,是把当前文档的内容插入到模板的Body书签中. 如果使用印章,必须 ...

  7. Media层

    媒体层包含图形技术.音频技术和视频技术,这些技术相互结合就可为移动设备带来最好的多媒体体验,更重要的是,它们让创建外观音效俱佳的应用程序变得更加容易.您可以使用iOS的高级框架更快速地创建高级的图形和 ...

  8. Event Delivery: The Responder Chain(事件传递,响应链)

    当我们设计app的时候,我们很可能想动态的响应事件.例如,触摸一个拥有许多不同对象的屏幕,你要决定给哪个对象一个响应事件,怎么样对象接收到事件. 当一个用户产生事件发生时(如 点击),UIKit产生一 ...

  9. RDF Database和NoSql DB

    一篇比较老的文章,介绍了RDF Database和其他一些分类的NoSql DB http://blog.datagraph.org/2010/04/rdf-nosql-diff

  10. linux系统中中断已连接的用户

    1.用w命令查看当前系统登录的用户 [root@rhel7 ~]# w :: up :, users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOG ...