2011-08-29 6 views
3

나는 5 월 클래스의 인스턴스에서이 코드를 실행self = [super init]을 실행하면 nil을 반환하며 올바른 응답은 무엇입니까?

-(id)init { 
    self = [super init]; 
    if (self) { 
     // my init code here 
    } 
    return self; 
} 

을 ... 그리고 자기은 nil을 반환합니다. 나는 이것이 올바른 절차임을 알고 있으므로해야한다. 그러나 자아가 제자리로 돌아 오지 않는다면 어떻게해야합니까? 프로그램이 실패했고 종료 중임을 경고합니다. 무시해 ? 또는 안전하게 진행하기 위해 권장되는 절차가 있습니까?

답변

3

나는 재귀 적으로 들리는 것을 알고 있지만,이 인스턴스에서해야 할 가장 좋은 방법은 무효를 반환하는 것입니다.

이니셜 라이저에서 nil 값이 반환 될 때 개체 상태가 실제로 예측할 수 없으므로 가장 안전한 방법은 개체를 처분하는 것입니다. 이니셜 라이저에서 호출자에게 nil을 반환하는 것을 의미합니다.

alloc] init을 할 때 항상 이런 상황이 유출로 이어질 것 같아서 allocate init을 맹목적으로 호출하는 것을 주저했습니다.

2

개인적으로 발생하는 일은 본 적이 없습니다. 하지만 objc가 아무 일도 잘 처리하지 못하기 때문에 여러분이 슈퍼에서받은 무언가를 반환함으로써 이미 여러분이하고있는 것 이상으로 특수한 경우에 대해 걱정하지 않을 것입니다.

+0

Objective-C의 결함으로 메시지를 보낼 수 있습니다. 즉, 추억을 다 쓸 수는 있지만 나중에 문제를 정상적으로 처리하는 방법을 모를 때까지는 알 수 없습니다. –

+1

정확히 어떻게 메모리가 부족합니까? –

+1

@Don -init 메소드에서 nil을 리턴하면 초기화 프로세스에서 실패한 사항이 있음을 나타냅니다. 메모리가 부족한 경우 + alloc은 nil을 반환하고 -init는 호출되지 않습니다. 나는 Objective-C 패러다임을 선호한다. 새 개체를 만들 때 또는 메서드 매개 변수로 개체를받을 때 반환 값을 확인하는 것을 잊을 때마다 NULL 포인터 예외에 대해 걱정할 필요가 없습니다. 앱에서 중요한 것만 명시 적으로 확인하면됩니다. –

관련 문제