[Swift] deinitializer

승아·2021년 4월 18일
0

부스트코스-iOS 프로그래밍을 위한 스위프트 기초

✅⠀디이니셜라이저(deinitializer)란?

  • deinit은 클래스의 인스턴스가 메모리에서 해제되는 시점에 호출됩니다.
  • 인스턴스가 해제되는 시점에 해야할 일을 구현할 수 있습니다.
  • deinit은 매개변수를 지닐 수 없습니다.
  • 자동으로 호출되므로 직접 호출할 수 없습니다.
  • 디이니셜라이저는 클래스 타입에만 구현할 수 있습니다.
  • 인스턴스가 메모리에서 해제되는 시점은 ARC(Automatic Reference Counting)의 규칙에 따라 결정됩니다.
class PersonE {
    var name: String
    var pet: Puppy?
    var child: PersonC
    
    init(name: String, child: PersonC) {
        self.name = name
        self.child = child
    }
    
    // 인스턴스가 메모리에서 해제되는 시점에 자동 호출
    deinit {
        if let petName = pet?.name {
            print("\(name)\(child.name)에게 \(petName)를 인도합니다")
            self.pet?.owner = child
        }
    }
}

var donald: PersonE? = PersonE(name: "donald", child: jenny)
donald?.pet = happy
donald = nil // donald 인스턴스가 더이상 필요없으므로 메모리에서 해제됩니다

0개의 댓글