Je pense que, dans la plupart des classes, si la valeur de retour de [super init] est nulle et que vous la vérifiez, comme recommandé par les pratiques standard, puis que vous la renvoyez prématurément si elle est nulle, en gros, votre application ne fonctionnera toujours pas correctement. Si vous pensez à ce sujet, même si que si (auto! = Nil) chèque est là, pour le bon fonctionnement de votre classe, 99,99% du temps que vous avez réellement faire besoin d'être auto non nul. Maintenant, supposons que, pour une raison quelconque, [super init] ait renvoyé nil, fondamentalement votre vérification contre nil consiste essentiellement à passer la balle à l'appelant de votre classe, où il échouerait probablement de toute façon, car il supposera naturellement que l'appel était réussi.
En gros, ce à quoi je veux en venir, c'est que 99,99% du temps, le if (self! = Nil) ne vous achète rien en termes de plus grande robustesse, puisque vous ne faites que passer la responsabilité à votre invocateur. Pour vraiment être en mesure de gérer cela de manière robuste, vous devez en fait mettre des vérifications dans toute votre hiérarchie d'appel. Et même dans ce cas, la seule chose que cela vous achèterait, c'est que votre application échouerait un peu plus proprement / solidement. Mais cela échouerait toujours.
Si une classe de bibliothèque décide arbitrairement de retourner nil à la suite d'un [super init], vous êtes de toute façon f *** ed, et c'est plus une indication que l'auteur de la classe de bibliothèque a fait une erreur d'implémentation.
Je pense que c'est plus une suggestion de codage héritée, lorsque les applications s'exécutaient dans une mémoire beaucoup plus limitée.
Mais pour le code de niveau C, je vérifierais toujours généralement la valeur de retour de malloc () par rapport à un pointeur NULL. Alors que, pour Objective-C, jusqu'à ce que je trouve des preuves du contraire, je pense que je vais généralement sauter les vérifications if (self! = Nil). Pourquoi cet écart?
Car, aux niveaux C et malloc, dans certains cas, vous pouvez en fait récupérer partiellement. Alors que je pense qu'en Objective-C, dans 99,99% des cas, si [super init] retourne nil, vous êtes fondamentalement f *** ed, même si vous essayez de le gérer. Vous pouvez tout aussi bien laisser l'application planter et gérer les conséquences.