原创文章,欢迎转载。转载请注明:关东升的博客

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

下面看看示例代码:

class Rectangle {var width: Doublevar height: Doubleinit(width: Double, height: Double){self.width   = widthself.height  = height}init(W width: Double,H height: Double){self.width   = widthself.height  = height}deinit {              //定义了析构函数print("调用析构函数...")self.width = 0.0self.height  = 0.0       }
}var rectc1: Rectangle? = Rectangle(width: 320, height: 480) //实例rectc1
print("长方形:\(rectc1!.width) x\(rectc1!.height)")
rectc1 = nil                     //触发调用析构函数的条件var rectc2: Rectangle? = Rectangle(W: 320, H: 480)       //实例rectc2
print("长方形:\(rectc2!.width) x\(rectc2!.height)")
rectc2 = nil                     //触发调用析构函数的条件

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

运行结果如下:

长方形:320.0 x 480.0

调用析构函数...

长方形:320.0 x 480.0

调用析构函数...

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

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                             
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

《从零开始学Swift》学习笔记(Day 40)——析构函数相关推荐

  1. 从零开始学STM32(学习笔记——第三天)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 参考文章: [教学文章]STM32内部重要功能全记录 [教学文章]STM32内部核心功能大揭秘 [教学文章]STM32内部重要功能全记录 框架:STM32 ...

  2. 【从零开始学深度学习编译器】十二,MLIR Toy Tutorials学习笔记一

    本笔记由学习MLIR Tutorials总结而成,欢迎批评指正. Chapter1: Toy语言和AST MLIR提供了一种Toy语言来说明MLIR的定义和执行的流程.Toy语言是一种基于张量的语言, ...

  3. 关东升的《从零开始学Swift》即将出版

    大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在< ...

  4. 关东升的《从零开始学Swift》

    这个博文是swift 2.0的,也是可以参考的 http://blog.csdn.net/tonny_guan/article/category/6139217 文章目录 [置顶] 关东升的<从 ...

  5. 关东升的《从零开始学Swift》3月9日已经上架

    大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全 ...

  6. 【从零开始学深度学习编译器】十三,如何在MLIR里面写Pass?

    [GiantPandaCV导语]这篇文章是学习了比较久然后按照自己的理解步骤重新总结了下来,主要是MLIR Toy Tutorials第3,4篇文章的内容.这里主要讲解了如何在MLIR中自定义Pass ...

  7. 动手学深度学习笔记3.4+3.5+3.6+3.7

    系列文章目录 动手学深度学习笔记系列: 动手学深度学习笔记3.1+3.2+3.3 文章目录 系列文章目录 前言 一.softmax回归 1.1 分类问题 1.2 网络架构 1.3 全连接层的参数开销 ...

  8. matlab将图片旋转的代码_从零开始的matlab学习笔记——(27)图像旋转与动态图...

    matlab应用--求极限,求导,求积分,解方程,函数绘图,三维图像,拟合函数....更多内容尽在个人专栏:matlab学习 昨天思考了一下,因为笔者的GUI只是刚刚入门,如果直接说的话也说不了多少东 ...

  9. 影像组学视频学习笔记(43)-标准差、标准误及95%置信区间CI、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/f09d0f97592f 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(43)主要 ...

  10. 影像组学视频学习笔记(42)-影像组学特征提取问题解决过程复现、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/c3e6de2f79b3 来源:简书,已获转载授权 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(42)主要 ...

最新文章

  1. 【组队学习】【29期】2. 计算机视觉
  2. 读书人:人机融合中的深度态势感知
  3. 控制ALV单元格可编辑
  4. DDR3布线的那些事儿(二)
  5. ssm上传文件获取路径_ssm框架实现图片上传显示并保存地址到数据库(示例代码)...
  6. python报告水印怎么弄_超简单Python安全批量打水印教程!
  7. 使用字符串修改彩票程序
  8. 基于MATLAB OCR的发票识别系统
  9. 2018年阿里巴巴关于java重要开源项目汇总
  10. linux如何在网页播放视频,Linux_网页媒体播放器代码详解,老式的播放器,新式播放器是在 - phpStudy...
  11. 32位计算机支持word系统,Office 32位与64位版本有什么区别?
  12. 基于Windows平台的Radius服务器搭建指南
  13. spj查询零件、工程、供应商表
  14. 程序员如何预防颈椎病?
  15. 电脑连接电视的方法---HDMI篇
  16. 【web开发】利用User-Agent获取浏览器类型
  17. golang 学习 - chan以及chan的一下用例
  18. 计算机usb口设置方法,如何控制电脑USB接口 常见的屏蔽电脑USB接口方法
  19. 计算机网络设备安装检验批,智能建筑工程分为哪些子分部工程与分项工程
  20. muti_LIDAR_calibration解析

热门文章

  1. apache2.4 php5.6.30,php5.6.3 + apache2.4.25 安装配置
  2. 第四版源码技术导航网自适应
  3. C# unicode 编码 和 解码
  4. 工行黄金递延业务AU(T+D)风险问题答案
  5. 字体大小 js 控制
  6. IE8下div+CSS
  7. 笔记-网页内嵌Google地图与地理位置模拟
  8. Ubuntu连接SSHHow to: Connect SSH, SFTP and FTP Servers using Nautilus ubuntu 13.04
  9. 获取远程文件内容之浏览器模拟器(BrowserEmulator)
  10. JAVA类定义,成员类,抽象类及接口类