일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 정렬 알고리즘
- Stack
- 시간복잡도
- HTML
- 파이썬
- windosws wbcs
- 백준
- System
- ftz
- Java
- 파일 시스템
- 암호수학
- SWiFT
- c언어
- War Game
- 두근두근 자료구조
- LoB
- 미로 탐색 알고리즘
- PHP
- 스택
- pwnable.kr
- 자료구조
- OSI
- level13
- 재귀
- web
- 큐
- windosw 문자열
- C
- ftz level13
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 11.2 인스턴스 소멸 본문
반응형
스위프트 프로그래밍 3판 - 야곰 지음
11.2 인스턴스 소멸
클래스의 인스턴스는 디이니셜라이저를 구현할 수 있습니다. 디이니셜라이저는 이니셜라이저와 반대 역할을 합니다. 즉, 메모리에서 해제되기 직전 클래스 인스턴스와 관련하여 원하는 정리 작업을 구현할 수 있습니다. 디이니셜라이저는 클래스의 인스턴스가 메모리에서 소멸되기 바로 직전에 호출됩니다. deinit 키워드를 사용하여 디이니셜라이저를 구현하면 자동으로 호출됩니다. 디이니셜라이저는 클래스의 인스턴스에만 구현할 수 있습니다.
스위프트는 인스턴스가 더 이상 필요하지 않으면 자동으로 메모리에서 소멸시킵니다. 만약 인스턴스 내부에서 파일을 불러와 열어보는 등의 외부 자원을 사용했다면 인스턴스를 소멸하기 직전에 파일을 다시 저장하고 닫아주는 등의 부가 작업을 해야합니다. 그런 경우 디이니셜라이저는 굉장히 유용하게 사용할 수 있습니다.
class SomeClass{
deinit{
print("Instance will be deallocated immediately")
}
}
var instance: SomeClass? = SomeClass()
instance = nil
class FileManager{
var fileName: String
init(fileName: String){
self.fileName = fileName
}
func openFile(){
print("Open File: \(self.fileName)")
}
func modifyFile(){
print("Modify File: \(self.fileName)")
}
func writeFile(){
print("Write File: \(self.fileName)")
}
func closeFile(){
print("Close File: \(self.fileName)")
}
deinit {
print("Deinit instance")
self.writeFile()
self.closeFile()
}
}
var fileManager: FileManager? = FileManager(fileName: "abc.txt")
if let manager: FileManager = fileManager{
manager.openFile()
manager.modifyFile()
}
fileManager = nil
반응형
'Programming > Swift' 카테고리의 다른 글
[Swift] 13.3 클로저 표현 간소화 / 타입 유추 / 단축 인자 / 암시적 반환 / 연산자 함수 (0) | 2021.07.28 |
---|---|
[Swift] 13. 클로저 / 기본 클로저 / 후행 클로저 (0) | 2021.07.27 |
[Swift] 11.1.5 기본 이니셜라이저와 멤버와이즈 이니셜라이저 / 초기화 위임 / 실패 가능한 이니셜라이저 (0) | 2021.07.26 |
[Swift] 11.1 인스턴스 생성 / 이니셜라이저 / 옵셔널 프로퍼티 / 상수 프로퍼티 (0) | 2021.07.23 |
[Swift] 10.2 메서드 / 인스턴스 메서드 / 타입 메서드 (0) | 2021.07.20 |