swift自学笔记六构造方法、析构方法


// ****************构造方法*****************************//

//是一种特殊的方法一个对象创建完后都需要调用构造方法进行初始化(比如属性初始化)

// 构造方法的特点:方法 init 没有func关键字 没有返回值

class Dog {

var name:String // 可以在这里属性初始值

var age:Int

init(name:String,age:Int){ // init 前面没有func关键字 后面也没有返回值哦

self.name = name //也可以在这里属性初始值,我在这里给的

self.age = age

print("www")

}

}

var dd = Dog(name: "lala",age: 90) //当创建对象的时候就会调用带有参数的init方法,注意:1函数的参数都是局部的 2func方法认的第一个参数是局部参数其余参数既是局部又是外部的。3.init构造方法的所有的参数既是局部的又是外部的。

// 存储属性的初始化:在对象创建时,所有的存储属性必须有初始值,在定义属性时设置认值或在构造方法(init)中为属性赋值


//****构造方法的类型

//**指定构造方法认情况下所有的构造方法都是指定构造方法

//**便利构造方法,被convenience关键字修饰的构造方法就是便利构造方法

//**构造方法的细节:1.认情况下,每一个类都有个隐式的无参的指定构造方法init(){/*...*/},2.如果你自己生成了有参的构造方法,那么系统就不会再帮你生成认的那个无参的构造方法了。3.指定构造方法必须调用其直接父类的指定构造方法(除非没有父类4.便利构造方法必须调用同一类中定义的其他构造方法(不能调用父类 5.便利构造方法必须最终以调用一个指定构造方法结束 6.如果父类中只有一个指定构造方法,而且是无参的,子类的指定构造方法认会自动调用父类中无参的指定构造方法(例2

//

class man {

var name:String

var age:Int

var height:Double

init(name:String,age:Int,height:Double){

self.name = name

self.age = age

self.height = height

}

convenience init(name:String){

self.init(name:name,age:90,height:60.5)

}

convenience init(age:Int){

self.init(name:"",age:age,height:60.9)

}

convenience init(height:Double){

self.init(name:"",age:80,height:height)

}

}

// 2

class Animal{

init() {

print("rrrr")

}

}


class cat : Animal {

init(name:String) { //系统会在这里调用父类的无参init指定构造方法

print("eeeee")

}

}

var c = cat(name: "ddd")



//***************析构方法************************//

//***一个对象被释放之前。析构方法会立即被自动调用

//***析构方法不带任何参数,不带小括号

//***一般在析构方法中进行资源的释放,不可以手动调

class dog {

deinit {

print("dead")

}

}

func newDog(){

_ = dog()

}


newDog()

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...