Я думаю, что в большинстве классов, если возвращаемое значение из [super init] равно nil, и вы проверяете его, как рекомендовано стандартными методами, а затем возвращаете преждевременно, если nil, в основном ваше приложение все еще не будет работать правильно. Если вы думаете об этом, несмотря на то, что если (само! = Ноль) проверка есть, для правильной работы вашего класса, 99,99% времени вы на самом деле делаете потребность себя , чтобы быть не равна нулю. Теперь, предположим, по какой-то причине, [super init] действительно возвратил nil, в основном, ваша проверка против nil в основном передает баг до вызывающей стороны вашего класса, где он, вероятно, в любом случае потерпит неудачу, поскольку он, естественно, предположит, что вызов был успешный.
По сути, я нахожусь в том, что в 99,99% случаев if (self! = Nil) ничего не покупает с точки зрения большей надежности, поскольку вы просто перекладываете деньги на своего призывателя. Чтобы по-настоящему справиться с этим, вам нужно будет проверять всю иерархию вызовов. И даже в этом случае единственное, что он может купить, - это то, что ваше приложение не сможет работать более чисто / надежно. Но все равно не получится.
Если библиотечный класс произвольно решил вернуть nil в результате [super init], вы в любом случае в значительной степени ошеломлены, и это скорее указывает на то, что автор библиотечного класса допустил ошибку реализации.
Я думаю, что это скорее предложение устаревшего кодирования, когда приложения запускались в гораздо более ограниченной памяти.
Но для кода уровня C я все равно обычно проверял бы возвращаемое значение malloc () по нулевому указателю. Принимая во внимание, что для Objective-C до тех пор, пока я не найду доказательства обратного, я думаю, что обычно я пропускаю проверки if (self! = Nil). Почему расхождение?
Потому что на уровнях C и malloc в некоторых случаях вы можете частично восстановиться. В то время как я думаю, что в Objective-C, в 99,99% случаев, если [super init] действительно возвращает nil, вы в сущности офигены, даже если вы пытаетесь справиться с этим. Вы могли бы просто позволить приложению аварийно завершить работу и справиться с последствиями.