초기화 해제 구문은 클래스 타입에서만 사용 가능
Swift는 클래스 인스턴스가 더이상 필요하지 않을 때 자동으로 할당 해제
Swift는 ARC를 사용하여 메모리를 관리하기 때문에, 일반적으로 우리가 직접 구현해서 수행할 필요는 없음.
하지만 deinit 시, 해야 할 작업이 있을 수도 있다.
deinit {
}
class Student {
var name: String?
var age: Int?
init(name: String, age: Int) {
self.name = name
self.age = age
print("init...")
}
deinit {
print("deinit...")
}
}
var min: Student? = Student(name: "Min", age: 24) // init...
min = nil // deinit...
class Person {
var name: String?
var age: Int?
init(name: String, age: Int) {
self.name = name
self.age = age
print("Person Initialized")
}
deinit {
print("Person Deinitialized")
}
}
class Student: Person {
var grade: Int?
init(grade: Int, name: String, age: Int) {
self.grade = grade
super.init(name: name, age: age)
print("Student Initialized")
}
deinit {
print("Student Deinitialized")
}
}
var min: Student? = Student(grade: 3, name: "Min", age: 24)
// Person Initialized
// Student Initialized
min = nil
//Student Deinitialized
//Person Deinitialized
하위 클래스에 초기화 해제 구문이 없는 경우
class Person {
var name: String?
var age: Int?
init(name: String, age: Int) {
self.name = name
self.age = age
print("Person Initialized")
}
deinit {
print("Person Deinitialized")
}
}
class Student: Person {
var grade: Int?
init(grade: Int, name: String, age: Int) {
self.grade = grade
super.init(name: name, age: age)
print("Student Initialized")
}
}
var min: Student? = Student(grade: 3, name: "Min", age: 24)
// Person Initialized
// Student Initialized
min = nil
// Person Deinitialize
https://bbiguduk.gitbook.io/swift/language-guide-1/deinitialization