Creo que, en la mayoría de las clases, si el valor de retorno de [super init] es nulo y lo verifica, como lo recomiendan las prácticas estándar, y luego regresa prematuramente si es nulo, básicamente su aplicación todavía no funcionará correctamente. Si se piensa en ello, a pesar de que si (auto! = Nil) cheque está ahí, para un correcto funcionamiento de la clase, el 99,99% de las veces que realmente haces necesidad de auto para ser no nula. Ahora, supongamos que, por cualquier razón, [súper init] hizo nula rentabilidad, básicamente, su cheque contra nula es, básicamente, pasando la pelota a la persona que llama de la clase, donde sería probable es que no todos modos, ya que, naturalmente, asumir que la llamada era exitoso.
Básicamente, lo que quiero decir es que el 99.99% de las veces, el if (self! = Nil) no te compra nada en términos de mayor robustez, ya que solo estás pasando el dinero a tu invocador. Para realmente poder manejar esto de manera robusta, en realidad necesitaría poner controles en toda su jerarquía de llamadas. E incluso entonces, lo único que te compraría es que tu aplicación fallará de manera más limpia / robusta. Pero aún fallaría.
Si una clase de biblioteca decidió arbitrariamente devolver nil como resultado de un [superiniciado], de todos modos estás bastante jodido, y eso es más una indicación de que el escritor de la clase de biblioteca cometió un error de implementación.
Creo que esto es más una sugerencia de codificación heredada, cuando las aplicaciones se ejecutaron en una memoria mucho más limitada.
Pero para el código de nivel C, todavía normalmente verificaría el valor de retorno de malloc () contra un puntero NULL. Mientras que, para Objective-C, hasta que encuentre evidencia de lo contrario, creo que generalmente omitiré las verificaciones if (self! = Nil). ¿Por qué la discrepancia?
Porque, en los niveles de C y malloc, en algunos casos puede recuperarse parcialmente. Mientras que pienso en Objective-C, en el 99.99% de los casos, si [super init] devuelve nulo, básicamente estás jodido, incluso si intentas manejarlo. También podría dejar que la aplicación se bloquee y lidiar con las consecuencias.