ноль сообщений очень часто используется в ObjC. Люди могут бороться, хорошо это или плохо; к этому нужно привыкнуть. Если вы попытаетесь разбить его хитростями, то вы сломаете Какао, потому что Какао использует его. Существуют некоторые приемы (например, сообщение diciu), которые позволяют отлаживать в ситуациях, когда вы подозреваете, что нет сообщений, но просто не можете их найти. Но вы не можете просто оставить их в своем коде (и пост в блоге выше проясняет это). Обмен сообщениями ноль слишком распространен внутри фреймворков.
Впрочем, к исходной точке зрения сравните:
- (void)doSomethingWith:(id)x {
NSAssert(x != nil, @"Don't pass me nil");
[x something];
}
против
void Bar::DoSomething(Foo *x) {
assert(x != NULL);
if (x != NULL) {
x.something;
}
}
В обоих случаях вам нужно протестировать, и в обоих случаях компилятор не предупредит вас, если вы не сможете протестировать. Разница лишь в том, в каких случаях вы терпите крах / утверждаете. Лично я пишу макросы вокруг NSAssert()
, которые заставляют его всегда печатать сообщение журнала в случае сбоя. Это только сбой в Debug. Таким образом, когда клиент отправляет мне логи, я вижу, что утверждения не сработали.