가능한 중복 :
In Objective-C why should I check if self = [super init] is not nil?재정 초기화
나는 오브-C에 새로 온 사람, 반환 값이 테스트로 nil이 아닌이 왜 힘든 시간을 이해하는 데 "if 문".
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
이 메서드는 부모 이니셜 라이저를 먼저 호출합니다. 부모의 이니셜 라이저를 실행하면 상속 된 인스턴스 변수가 제대로 초기화됩니다. 이니셜 라이저는 메모리에있는 객체의 위치를 변경할 권한이 있으므로 (참조가 변경됨을 의미) 부모의 init 메소드 실행 결과를 다시 self에 할당해야합니다. 부모의 초기화가 성공하면 반환되는 값은 if 문에 의해 테스트 된대로 nil이 아닌 값이됩니다. 주석에서 알 수 있듯이, 뒤 따르는 블록 안에는 개체에 대한 사용자 지정 초기화 코드를 넣을 수있는 위치가 있습니다. 여기에는 종종 클래스에있는 인스턴스 변수를 할당하고 초기화하는 작업이 포함됩니다.
에서 스티븐 Kochan에서 코드 및 텍스트 "목표 - C에서 프로그래밍, 제 4 판"
나는 솔직해질 것입니다. 나는 결코 그것에 대해서 생각조차하지 않았습니다.그러나 'super init'을 호출하면 슈퍼 클래스 (NSObject)의 init 메소드가 호출됩니다. 거기에 할당 된 메모리의 위치를 결정하고 몇 가지 예비 초기화를 수행합니다. 나는 그것이 '자기'를 되돌려 줄 필요가 있다고 추측합니다. 왜냐하면 우리는 매개 변수를 그와 같은 사슬에서 '전달'할 수 있기 때문입니다. 그러나 나는 분명히 확실하지 않다. – ATaylor
[super init]이 nil이 아닌 값을 반환하는 이유를 묻는 경우 또는 반환 된 값이 nil이 아닌지 확인하는 이유를 묻는 중입니까? – yfrancis
꺼짐 : @yfrancis 안녕하세요! –