실패 가능한 이니셜라이저 (init?)¶
실패 가능한 이니셜라이저는 초기화 중 오류 발생 시 nil을 반환하거나 에러를 throw할 수 있다. 편의 이니셜라이저의 실패는 단순하지만, 지정 이니셜라이저의 실패는 부분 초기화된 객체의 정리가 핵심 과제이다.
지정 이니셜라이저 실패 시나리오¶
super.init() 위임 이후 실패: 완전 초기화된 self를 release (deinit 실행됨)
super.init() 위임 이전 실패: 부분 초기화된 stored property만 정리 (deinit 미실행)
해결 방법¶
- Pure Swift:
partialDeinitvtable 진입점으로 초기화된 프로퍼티만 역순 정리 - Objective-C: 숨겨진 비트 플래그로 슬라이스 초기화 추적,
-release로 해제
DI(Definite Initialization) 패스가 추적을 담당, struct는 완전 지원됨.
관련 페이지: TypeState proposal → 초기화 / lifetime / ownership 경계 교차 읽기, Initialization / Accessors proposals → property model 교차 읽기, Initializer Inheritance proposal → 현대 init 모델 교차 읽기, Constructors / ClassConstruction proposals → 현대 init 모델 교차 읽기, SIL 초기화 규약, 위키 키워드 연결망, 타입 체커 설계 및 구현, 진단 시스템 (Diagnostics), SIL 함수 호출 규약, 동적 캐스팅 동작, Swift 컴파일러 모노레포 개요