Я не могу говорить с NSAssert, но я представляю, что он работает аналогично assert () в C.
assert () используется для обеспечения семантического контракта в вашем коде. Вы спросите, что это значит?
Что ж, это как вы сказали: если у вас есть функция, которая никогда не должна получать -1, вы можете использовать assert (), чтобы:
void gimme_positive_ints (int i) {
утверждать (я> 0);
}
И теперь вы увидите что-то вроде этого в журнале ошибок (или STDERR):
Утверждение i> 0 не выполнено: файл example.c, строка 2
Таким образом, он не только защищает от потенциально плохих входных данных, но и регистрирует их полезным, стандартным способом.
Да, и по крайней мере в C assert () был макрос, так что вы можете переопределить assert () как запрет на использование в вашем коде релиза. Я не знаю, так ли это с NSAssert (или даже с assert ()), но было довольно полезно скомпилировать эти проверки.