类型检查
类型检查通过is与as两个操作符来实现。
is 操作符可以判断两个实例是否是同一个类。
as 操作符可以将元素转化为想转化的类。
as? 操作符可以将元素转化为想转化的类的可选类型。
as! 操作符可以将元素转化为想转化的类的明确类型。
比如在字典中取值,根据Key取到的可能有值,可能没有值,所以返回结果是一个可选类型。这个时候如果要赋值给一个变量,那么就需要进行类型转换。
Any与AnyObject
swift中针对不确定类型的对象有两种特殊的别名,Any和AnyObject。Any表示任意的类型,包括类、结构体、基本数据类型等等。AnyObject只能表示任意的类的实例对象,结构体对象不能用这个表示。
实例对象的销毁
析构是实例对象释放前所做的动作,需要释放它所占有的内存资源。
析构器 deinitializer 不需要任何参数。
deinit {
释放资源代码
}
有继承关系的子类调用析构器的顺序是,先子类再父类。
class Person{
let name : String
var imageA : UIImage
init(personName: String) {
name = personName
imageA = UIImage.init()
}
deinit {
//释放imageA
print("释放imageA")
}
}
class Student: Person {
var imageB : UIImage
override init(personName: String) {
imageB = UIImage.init();
super.init(personName: personName)
}
deinit {
//释放imageB
print("释放imageB")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let xiaoMingStudent = Student.init(personName: "xiaoMing")
}
}
运行结果:
释放imageB
释放imageA