это прекрасно. также более идиоматично просто пропустить тест для nil
.
негласно, компилятор (обычно *) генерирует вызов objc_msgSend
или одного из его вариантов. реализация objc_msgSend
(и вариантов) позволяет объекту сообщения быть nil
в том смысле, что он хорошо определен и не считается ошибкой программиста для сообщения nil
. возвращаемое значение objc_msgSend
+ вариантов обнуляется:
пример:
NSString * string = nil;
NSString * copy = [string copy]; << copy will be 0/nil
NSUInteger length = [copy length]; << length will be 0
это означает, что вы должны проверять nil, если возвращаете объект c ++ - конструктор не будет вызываться, если получатель равен nil.
*, как правило, в том смысле, что имеется несколько функций c, которые компилятор вызывает для обмена сообщениями, а также некоторые другие общие подпрограммы.