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

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

下面看看示例代码:

classRectangle{

varwidth:Double
varheight:Double

init(width:Double,height:Double){
self.width=width
self.height=height
}

init(Wwidth:Double,Hheight:Double){
self.width=width
self.height=height
}

deinit{//定义了析构函数
print("调用析构函数...")
self.width=0.0
self.height=0.0
}
}

varrectc1:Rectangle?=Rectangle(width:320,height:480)//实例rectc1
print("长方形:\(rectc1!.width)x\(rectc1!.height)")
rectc1=nil//触发调用析构函数的条件

varrectc2: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_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息

wKioL1bXnp_hJrbsAAAs2MBEZnc392.png

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php

《从零开始学Swift》学习笔记Day 40――析构函数的更多相关文章

  1. 在ios上使用来自框架的boost :: filesysystem路径

    我一直在使用Boost作为PeteGoodliffe脚本构建的框架已有一段时间了.效果很好.最近我遇到了一个问题,可以通过将以下代码放入另一个全新的XCode项目中的视图控制器的viewDidLoad中来重现:当路径对象被销毁时会导致EXC_BAD_ACCESS.有没有其他人遇到这个问题?

  2. 如何在Xcode中追踪“libc abi.dylib:纯虚函数!”

    我有一个多线程OSX应用程序,它使用C,Objective-C和Swift的混合.当我的应用程序关闭时,我在Xcode调试器窗口中看到了这一点:我知道这个错误通常是由对C类构造函数或析构函数中的虚函数的调用引起的.有没有一种简单的方法可以找到它的位置?

  3. swift的struct结构体类型介绍使用

  4. Swift学习笔记(十三)析构过程

    析构过程在一个类的实例被释放之前,析构函数被立即调用。用关键字deinit来标示析构函数,类似于初始化函数用init来标示。析构过程原理Swift会自动释放不再需要的实例以释放资源Swift通过自动引用计数处理实例的内存管理示例析构函数是在实例释放发生前一步被自动调用。即使子类没有提供自己的析构函数,父类的析构函数也总是被调用。

  5. swift详解之七------------你真的了解构造过程吗构造过程和析构过程

    你真的了解构造过程吗注:本文为作者整理,尽量没有废话,都是干货。Swift提供了两种类型的类构造器来确保所有类实例中存储型属性都能获得初始值,它们分别是指定构造器和便利构造器。自动构造器的继承子类不会默认继承父类的构造器。

  6. 01-swift的简单了解

    swift是完全面向对象的语言,自身具有构造函数和析构函数。",表示不确定有没有对该变量进行赋值varstr:String?可选类型的使用在使用可选变量时,需要在变量名后面加上感叹号"!"成立时的代码":"不成立时的代码"区间运算符闭区间“...”包含最后一个值半闭区间"..

  7. Swift 2.0学习笔记Day 40——析构函数

    在析构过程中也会调用一种特殊的方法deinit,称为析构函数。下面看看示例代码:析构函数的调用是在实例被赋值为nil,表示实例需要释放内存,在释放之前先调用析构函数,然后再释放。运行结果如下:长方形:320.0x480.0调用析构函数...长方形:320.0x480.0调用析构函数...析构函数只适用于类,不能适用于枚举和结构体。而在Swift中,内存管理采用自动引用计数,不需要在析构函数释放不需要的实例内存资源,但是还是有一些清除工作需要在这里完成,如关闭文件等处理。

  8. 《从零开始学Swift》学习笔记Day 40――析构函数

    在析构过程中也会调用一种特殊的方法deinit,称为析构函数。下面看看示例代码:析构函数的调用是在实例被赋值为nil,表示实例需要释放内存,在释放之前先调用析构函数,然后再释放。运行结果如下:长方形:320.0x480.0调用析构函数...长方形:320.0x480.0调用析构函数...析构函数只适用于类,不能适用于枚举和结构体。而在Swift中,内存管理采用自动引用计数,不需要在析构函数释放不需要的实例内存资源,但是还是有一些清除工作需要在这里完成,如关闭文件等处理。

  9. Swift - deinit

    每个类只有一个析构函数,用关键字deinit定义。在类实例被释放之前被自动调用,不允许主动调用自己的析构函数。(即使子类没有提供自己的析构函数,父类的析构函数也总是被调用。

  10. Swift学习:2.15 析构过程

    用关键字deinit来标示析构函数,类似于初始化函数用init来标示。析构函数只适用于类类型。析构过程原理Swift会自动释放不再需要的实例以释放资源。如自动引用计数那一章描述,Swift通过自动引用计数处理实例的内存管理。vendCoins方法在bank分发硬币之前检查是否有足够的硬币。vendCoins方法返回一个整型值,表明了提供的硬币的实际数目。这里,player已经赢得了2,000硬币。在这发生前一步,其析构函数被自动调用,其硬币被返回到银行。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部