소멸자

쏘스야·2023년 4월 18일
0

ios 개발자의 첫걸음

목록 보기
61/61
/**
 소멸 - 초기화
 
 - 소멸자
 - 인스턴스가 메모리에서 해제되기 직전 정리가 필요한 내용을 구현하는 메서드
 - 클래스 정의시 클래스에는 최대 1개의 소멸자(deinitializer)를 정의 가능
 - 소멸자는 파라미터(매개 변수)를 사용하지 않음
 
 - 소멸자(초기화 해제) 작동 방식
 - Swift는 클래스의 인스턴스(객체)를 자동 참조 계산 (ARC) 방식을 통해 메모리 관리
 - 일반적인 경우(강한 순환 참조를 제외한)에는 메모리에서 해제될 때
 - 수동으로 관리를 수행할 필요가 없음
 
 - 그러나 특별한 작업을 수행중인 경우, 몇가지 추가 정리를 직접 수행해야 할 수 있음
 - 예 ) 인스턴스에서 파일을 열고 일부 데이터를 쓰는 경우,
        클래스 인스턴스가 할당 해제되기 전에 파일을 닫아야 파일에 손상이 안 갈 수 있음
 - 소멸자에서는 인스턴스의 모든 속성에 엑세스 할 수 있으며
    해당 속성을 기반으로 동작을 수정할 수 있음( 예 : 닫아야하는 파일의 이름 조회)
 
 
 [상속이 있는 경우]
 - 상위클래스 소멸자는 해당 하위클래스에 의해 상속됨.
 - 상위클래스 소멸자는 하위클래스 소멸자의 구현이 끝날 때 자동으로 호출됨
 - 상위클래스 소멸자는 하위클래스가 자체적인 소멸자를 제공하지 않더라도 항상 호출됨
 */

class Aclass {
    var x = 0
    var y = 0
    
    deinit {
        print(self.x)
        print(self.y)
        print("인스턴스의 소멸 시점")
    }
}

var a: Aclass? = Aclass()
a = nil     // 메모리에 있던 a인스턴스가 제거됨


/**
 소멸자는 클래스에만 존재
 */

// 생성자는 필요한 만큼 구현할 수 있지만, 소멸자는 하나만 구현 가능함
// 소멸자는 직접호출할 수 없고(직접 호출하는 문법이 없고),
// 인스턴스(객체)가 메모리에서 제거되기 직전에 자동으로 호출됨 🤙🏻
profile
개발자

0개의 댓글