Eu realmente não posso falar com a NSAssert, mas imagino que funcione de maneira semelhante à afirmação de C ().
assert () é usado para impor um contrato semântico no seu código. O que significa isso, você pergunta?
Bem, é como você disse: se você tem uma função que nunca deve receber um -1, pode ter o assert () que impõe isso:
void gimme_positive_ints (int i) {
afirmar (i> 0);
}
E agora você verá algo assim no log de erros (ou STDERR):
Falha na asserção i> 0: arquivo example.c, linha 2
Portanto, ele não apenas protege contra entradas potencialmente ruins, como as registra de maneira útil e padrão.
Ah, e pelo menos em C assert () havia uma macro, para que você pudesse redefinir assert () como não operacional no seu código de lançamento. Não sei se esse é o caso do NSAssert (ou até mesmo assert ()), mas foi bastante útil compilar essas verificações.