실패 가능한 이니셜라이저 (init?)¶
실패 가능한 이니셜라이저는 초기화 중 오류 발생 시 nil을 반환하거나 에러를 throw할 수 있다. 편의 이니셜라이저의 실패는 단순하지만, 지정 이니셜라이저의 실패는 부분 초기화된 객체의 정리가 핵심 과제이다.
지정 이니셜라이저 실패 시나리오¶
super.init() 위임 이후 실패: 완전 초기화된 self를 release (deinit 실행됨)
super.init() 위임 이전 실패: 부분 초기화된 stored property만 정리 (deinit 미실행)
해결 방법¶
- Pure Swift:
partialDeinitvtable 진입점으로 초기화된 프로퍼티만 역순 정리 - Objective-C: 숨겨진 비트 플래그로 슬라이스 초기화 추적,
-release로 해제
DI(Definite Initialization) 패스가 추적을 담당, struct는 완전 지원됨.
관련 페이지: sil-initializer-conventions, overview