Я думаю, що в більшості класів, якщо значення повернення від [super init] дорівнює нулю, і ти перевіряєш його, як рекомендують стандартні практики, а потім повертається передчасно, якщо нуль, в основному ваш додаток все ще не працює належним чином. Якщо ви думаєте про це, не дивлячись на те, що якщо (саме! = Нуль) перевірка є, для правильної роботи вашого класу, 99,99% часу ви на самому справі робите потреба себе , щоб бути не дорівнює нулю. Тепер, припустимо, з будь-якої причини [super init] все- таки повернув нуль, в основному ваша перевірка проти нуля в основному передає долар абоненту вашого класу, де він, швидше за все, не вдасться, оскільки, природно, буде припускати, що дзвінок був успішний.
В основному, я отримую те, що 99,99% часу, якщо (self! = Nil) нічого не купує у плані більшої надійності, оскільки ви просто передаєте долар своєму провайдеру. Щоб реально впоратися з цим надійно, вам фактично потрібно було б встановити чеки у всій ієрархії викликів. І навіть тоді, єдине, що б вам придбало, - це те, що ваш додаток вийде з ладу трохи більш чисто / надійно. Але все-таки провалиться.
Якщо клас бібліотеки довільно вирішив повернути нуль в результаті [суперінітату], ви все одно в значній мірі, це більше свідчить про те, що автор бібліотечного класу допустив помилку в реалізації.
Я думаю, що це скоріше застаріла пропозиція щодо кодування, коли програми працювали в значно більш обмеженій пам'яті.
Але для коду рівня C я все одно перевіряю значення повернення malloc () проти покажчика NULL. Тоді як для Objective-C, поки не знайду доказів протилежного, я думаю, що я пропускаю перевірки if (self! = Nil). Чому невідповідність?
Тому що на рівнях С і малок в деяких випадках ви можете частково відновитися. Хоча я думаю, що в Objective-C, в 99,99% випадків, якщо [super init] поверне нуль, ви в основному знаходяться, навіть якщо ви намагаєтеся впоратися з цим. Ви також можете просто дозволити програмі вийти з ладу і вирішити наслідки.