Есть ли недостаток в отправке сообщения нулевому объекту в objective c?

#objective-c

#objective-c

Вопрос:

Я долгое время программирую на C , с большим количеством времени в C #. Однако сейчас я работаю в Objective C, и мне интересно, есть ли недостаток в отправке сообщения нулевому объекту в Objective C?

Например, я очень привык делать это:

 MyClass* c = NULL;
// ...
if( c != NULL ) c->MyMethod();
  

Итак, в Objective C я обнаружил, что делаю:

 MyClass* c = nil;
// ...
if( c != nil ) [c MyMethod];
  

Итак, что мне интересно, есть ли вообще какая-либо польза от проверки на nil? Достаточно ли умен Objective C, чтобы не выполнять никакой дополнительной странной обработки, если я попытаюсь отправить сообщение в nil? Или есть какие-то скрытые затраты, из-за которых стоит продолжать проверку на nil?

Комментарии:

1. Просто следите за случаями, когда вы используете возвращаемое значение.

Ответ №1:

В Objective-C вам не нужно проверять значение nil, сообщение с допустимым значением nil является абсолютно допустимым и в большинстве случаев возвращает nil или 0, если возвращаемое значение является целым числом. Возвращаемое значение не определено, если возвращаемое значение передаваемого сообщения является float, double или struct .

Комментарии:

1. Обмен сообщениями nil также высоко оптимизирован (как и отправка -retain или -release при включенном GC), поэтому в большинстве случаев это даже не влияет на производительность.

Ответ №2:

Нет. В этом прелесть Objective-C.

Ответ №3:

Обмен сообщениями с нулевым значением не является проблемой, если возвращаемое значение означает полное в этом контексте. В некоторых случаях отладка может усложниться…

«Если метод возвращает любой тип указателя, любое целое скаляр размером меньше или равным sizeof(void*), значение с плавающей точкой, double, long double или long long, то сообщение, отправленное в nil, возвращает 0» (Apple — ссылка ниже) — https://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html (Отправка сообщения в nil).