2011-07-18 10 views
10

Duplicar posible:
In Objective-C why should I check if self = [super init] is not nil?¿Por qué [super init] alguna vez devolvería nil, cuando "super" es NSObject?

En Objective-C libro que estoy leyendo, se dice que cuando [init] mensaje se envía a NSObject, en ocasiones puede volver nil y debemos verifique el valor de retorno, antes de enviar más mensajes a lo que puede terminar siendo nil.

self = [super init]; 

if (self) { 
do stuff 
} 

te pido que, sin embargo, lo que debe suceder para un NSObject a no ser capaz de init sí?

Editar: La pregunta trata específicamente de una instancia donde YourClass: NSObject.

+0

Mi pregunta es específica de un caso en el que la superclase de su clase es NSObject. – JAM

+0

La otra pregunta cubre ese caso, y tiene varias respuestas realmente excelentes. –

Respuesta

8

NSObject en sí nunca volverá nula en init, sin embargo otras clases que heredan de que podría, por lo que es considerado una buena práctica comprobar siempre el valor de retorno de init. Por ejemplo, esto devolverá nil:

[[NSData alloc] initWithContentsOfFile:@"path/to/a/file/that/does/not/exist"]; 
+0

Gracias! Supongo que para las clases donde '[super init]' nunca es 'nil', no es necesario poner esa marca. De esta forma podrías, por ejemplo: 'return [super initWithFoo: X baz: Y];' –

Cuestiones relacionadas