대부분의 클래스에서 [super init]의 반환 값이 nil이고 표준 사례에서 권장하는대로 확인한 다음 nil 인 경우 조기에 반환하면 기본적으로 앱이 여전히 올바르게 작동하지 않습니다. 당신도 그 불구하고, 그것에 대해 생각하는 경우 경우 (자기! = 전무) 검사 클래스의 적절한 작동을 위해, 거기, 당신이 실제로 시간의 99.99 % 할 nil이 아닌 될 필요 자체를. 자, 어떤 이유에서든 [super init] 가 nil을 반환했다고 가정합니다. 기본적으로 nil에 대한 검사는 기본적으로 클래스 호출자에게 벅을 넘겨주는 것으로 가정합니다. 성공한.
기본적으로, 내가 얻는 것은 99.99 %의 시간입니다 .if (self! = nil)는 벅을 전달자에게 넘겨주기 때문에 견고성 측면에서 아무것도 사지 않습니다. 실제로이 문제를 강력하게 처리하려면 실제로 전체 통화 계층 구조를 확인해야합니다. 그럼에도 불구하고 구매할 수있는 유일한 것은 앱이 더 깨끗하고 견고하게 실패한다는 것입니다. 그러나 여전히 실패 할 것입니다.
라이브러리 클래스가 [super init]의 결과로 임의로 nil을 반환하기로 결정했다면 어쨌든 거의 겁이 나고 라이브러리 클래스 작성자가 구현 실수를 한 것입니다.
앱이 훨씬 제한된 메모리에서 실행될 때 이것은 레거시 코딩 제안에 가깝습니다.
그러나 C 레벨 코드의 경우 일반적으로 여전히 NULL 포인터에 대해 malloc ()의 반환 값을 확인합니다. 반면 Objective-C의 경우, 반대로 증거를 찾을 때까지 if (self! = nil) 검사를 건너 뛸 것이라고 생각합니다. 왜 불일치가 발생합니까?
C 및 malloc 레벨에서 일부 경우 실제로 부분적으로 복구 할 수 있기 때문입니다. Objective-C에서 99.99 %의 경우에 [super init]가 nil을 반환하면 처리하려고해도 기본적으로 f *** ed입니다. 앱이 중단되고 여파를 처리하게 할 수도 있습니다.