父类的反初始化方法可以被子类继承

Posted on 2021-05-14 13:39  懒惰的土拨鼠  阅读(54)  评论(0)    收藏  举报

父类的反初始化方法可以被子类继承

class Person {
    deinit {
        print("peson dinit")
    }
}

class Student: Person {}

func test() {
    var stu = Student()
}

test()

peson dinit
Program ended with exit code: 0

Student 类继承自父类 Person ,当test方法调用完成后,stu就会被销毁,可以看到,调用了父类Person中的deinit 方法,所以,父类的deinit方法可以被子类继承。

Person 与Person.self

class Person {
    //一个类型属性和一个类型方法(类属性和类方法)
    static var age = 0
    static func run() {}
}

//调用
Person.age = 10
Person.run()

//同等调用
Person.self.age = 10
Person.self.run()
//初始化实例对象
var p0 = Person()
var p1 = Person.self()
var p2 = Person.init()
var p3 = Person.self.init()
/**
 Person 是类,是类型
 Person.self 是这个类的类型,元类类型
 大多数情况是可以通用的
 只有当确切要表达是元类类型的时候不可通用
 */
//此时,Person.self 不能用Person代替
var ptype :Person.Type = Person.self
var p5 = Person.self

//需要元类类型作为参数时,也就是明确需要表达的是元类类型时,不能替代
func test(_ cls:AnyClass) {}