init()和deinit()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了init()和deinit()相关的知识,希望对你有一定的参考价值。

一、初始化方法(init()) 
1、定义:类初始化对象时所调用的方法 
2、分类: (1)默认初始化方法 
(2)便利初始化方法 
(3)使用闭包 
3、一些注意点: 
(1)方法固定名为init,没有返回值,方法名init前面也不需要加func 
(2)在创建对象之后,如果要使用对象的属性之前,必须对属性初始化 
(3)声明一个变量,必须赋初始值,除非这个变量是强制解包可选,或者在初始化方法赋初始值,也可达到同样的效果 
(4)初始化方法可以多个存在,并且每一个的方法名都是init,但是参数要不同。对于方法参数不同,不仅仅通过参数类型来判断,还涉及参数的名称,这个在其他语言中称为:方法的重载(参数名或者参数别名不同) 
4、一些例子的运用代码块

4.1、默认初始化方法,声明成员属性的时候,不赋初始值,但必须要有初始话方法对成员变量进行初始化 
技术分享

4.2、当声明为强制解包可选(!)可以不用初始化方法,在类进行实例化对象的时候再对变量进行赋初始值,但是有也没关系。 
技术分享

4.3、多个初始化方法并行(方法的重载) 
技术分享

4.4、初始化方法的分类 
(1) 使用提供的默认初始化方法 
技术分享

(2)便利初始化方法及其重载 
技术分享

(3)使用闭包(如果某个存储属性的默认值需要特别定制或者准备,那么久可以使用闭包来初始化这个属性的默认值) 
技术分享

二、反初始化方法(deinit()) 
1、定义:可以这么理解,初始化方法是为了类创建对象的时候,使用对象属性对其属性赋初始值,那么当你这个对象销毁的使用,也要对气属性进行释放。构造那么一个场景:当我们建立一个数据库访问,在初始化的时候打开链接,如果程序退出,链接不释放,资源就浪费了,反初始化方法可以释放这个链接,减少资源浪费。 
2、注意点 
当要关闭链接的时候,要把对象设置为nil,不然反初始化方法不会被调用 























以上是关于init()和deinit()的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift之深入解析dispose源码的实现

swift内存管理中的引用计数

HAL库笔记(重要库函数)

Mysql udf插件自定义实现

MySQL UDF:保留分配的内存?

Swift 关键字汇总