Swift—析构函数-备
与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程。在析构过程中也会调用一种特殊的方法deinit,称为析构函数。析构函数deinit没有返回值,也没有参数,也不需要参数的小括号,所以不能重载。
下面看看示例代码:
- class Rectangle {
- var width: Double
- var height: Double
- init(width: Double, height: Double) {
- self.width = width
- self.height = height
- }
- init(W width: Double,H height: Double) {
- self.width = width
- self.height = height
- }
- deinit { //定义了析构函数
- print("调用析构函数...")
- self.width = 0.0
- self.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),不需要在析构函数释放不需要的实例内存资源,但是还是有一些清除工作需要在这里完成,如关闭文件等处理。
Swift—析构函数-备的更多相关文章
- Swift—静态方法-备
静态方法与静态属性类似,Swift中定义了静态方法,也称为类型方法.静态方法的定义与静态属性类似,枚举和结构体的静态方法使用的关键字是static:类静态方法使用的关键字是class或static,如 ...
- Swift—下标-备
看下面的示例代码是不是使用过: var studentList: String[] = ["张三","李四","王五"] studentL ...
- swift闭包-备
我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swift中的闭包类似于Objective-C中的代码块.J ...
- Swift—重写-备
========================= 重写实例属性 我们可以在子类中重写从父类继承来的属性,属性有实例属性和静态属性之分,他们在具体实现也是不同的. 实例属性的重写一方面可以重写gett ...
- Swift常用语法示例代码(二)
此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上Th ...
- 《从零开始学Swift》学习笔记(Day 40)——析构函数
原创文章,欢迎转载.转载请注明:关东升的博客 与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程.在析构过程中也会调用一种特殊的方法deinit,称为析构函数.析构函数dein ...
- Swift 备忘单和快速参考
Variables var myInt = var myExplicitInt: Int = // explicit type var x = , y = , z = // declare multi ...
- Using Swift with Cocoa and Objective-C(Swift 2.0版):开始--基础设置-备
这是一个正在研发的API或技术的概要文件,苹果公司提供这些信息主要是为了帮助你通过苹果产品使用这些技术或者编程接口而做好计划,该信息有可能会在未来发生改变,本文当中提到的软件应该以最终发布的操作系统测 ...
- Swift—Cocoa Touch设计模式-备
目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制. 问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击 ...
随机推荐
- ArcGis : unable to save as template this document is already based on another template
原文:http://forums.esri.com/Thread.asp?c=93&f=989&t=289930 ----------------- I ran into this p ...
- JDK 和JRE的区别
JRE:Java Runtime Environment/Java运行时环境目标用户:只需要运行Java程序的用户JRE包含了:Deployment,User Interface Toolkits,I ...
- [置顶] Android开发之ProcessState和IPCThreadState类分析
在Android中ProcessState是客户端和服务端公共的部分,作为Binder通信的基础,ProcessState是一个singleton类,每个 进程只有一个对象,这个对象负责打开Binde ...
- shell脚本编写汇集
一.替换文本: ##1 sed -i 's/disabled=true/disabled=false/' /etc/fdfs/storage.conf ##2 sed -i 's/base_path= ...
- OpenStack Networking
今天的数据中心网络比以往不论什么时候包括的设备都要多,比如server.网络设备.存储系统和安全设备等.这当中有非常多被近一步划分为多个虚拟机和虚拟网络.IP地址的数量.路由配置和安全规则能够迅速达到 ...
- Spring事务管理使用
发现问题 最近,碰到一个问题,再用spring实现事务管理的时候,发现不起作用,在出异常时,并不会回滚数据库操作. 我想实现的功能如下: @Transactional(isolation=Isolat ...
- [Angular 2] Child Router
Benefit to use child router is Angualr 2 then can lazy load the component on demand. Define a child ...
- ActiveX控件打包成Cab置于网页中自动下载安装(转载)
原文出自http://www.iteye.com/topic/110834 [背景] 做过ActiveX控件的朋友都知道,要想把自己做的ActiveX控件功能放在自己的网页上使用,那么用户在客户端就必 ...
- java图片处理工具类
直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...
- git查看某个文件的修改历史
<转自 http://www.cnblogs.com/flyme/archive/2011/11/28/2265899.html> 有时候在比对代码时,看到某些改动,但不清楚这个改动的作者 ...