Je ne peux pas vraiment parler à NSAssert, mais j'imagine que cela fonctionne de manière similaire à assert () de C.
assert () est utilisé pour appliquer un contrat sémantique dans votre code. Qu'est-ce que cela signifie, demandez-vous?
Eh bien, c'est comme vous l'avez dit: si vous avez une fonction qui ne devrait jamais recevoir de -1, vous pouvez demander à assert () d'appliquer cela:
void gimme_positive_ints (int i) {
assert (i> 0);
}
Et maintenant, vous verrez quelque chose comme ça dans le journal des erreurs (ou STDERR):
Échec de l'assertion i> 0: fichier example.c, ligne 2
Ainsi, non seulement il protège contre les entrées potentiellement mauvaises, mais il les enregistre de manière standard et utile.
Oh, et au moins en C, assert () était une macro, vous pouvez donc redéfinir assert () comme un no-op dans votre code de version. Je ne sais pas si c'est le cas avec NSAssert (ou même assert () plus), mais c'était assez utile de compiler ces vérifications.