#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).