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,函数的参数都是局部的 2,func方法默认的第一个参数是局部参数其余参数既是局部又是外部的。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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |