Ein NSAssert löst eine Ausnahme aus, wenn dies fehlschlägt. NSAssert bietet also eine kurze und einfache Möglichkeit zum Schreiben und Überprüfen aller Annahmen, die Sie in Ihrem Code getroffen haben. Es ist (meiner Meinung nach) keine Alternative zu Ausnahmen, sondern nur eine Abkürzung. Wenn eine Behauptung fehlschlägt, ist in Ihrem Code ein furchtbarer Fehler aufgetreten, und das Programm sollte nicht fortgesetzt werden.
Zu beachten ist, dass NSAssert in einem Release-Build nicht in Ihren Code kompiliert wird. Daher wird dies normalerweise zur Überprüfung der Integrität während der Entwicklung verwendet. Ich neige dazu, ein benutzerdefiniertes Assert-Makro zu verwenden, das immer aktiv ist.
Die Zeiten, in denen Sie @throw
Ihre eigene NSException verwenden würden, sind, wenn Sie sie definitiv in einem Release-Build möchten, und in Dingen wie öffentlichen Bibliotheken / Schnittstellen, wenn einige Argumente ungültig sind oder Sie falsch aufgerufen wurden. Beachten Sie, dass @catch
eine Ausnahme nicht unbedingt üblich ist, und führen Sie Ihre Anwendung weiter aus. Wenn Sie dies mit einigen Standardbibliotheken von Apple (z. B. Core Data) versuchen, können schlimme Dinge passieren. Ähnlich wie bei einer Behauptung sollte die App im Allgemeinen ziemlich schnell beendet werden, wenn eine Ausnahme ausgelöst wird, da dies bedeutet, dass irgendwo ein Programmierfehler vorliegt.
NSErrors sollten in Ihren Bibliotheken / Schnittstellen für Fehler verwendet werden, bei denen es sich nicht um Programmierfehler handelt und die behoben werden können. Sie können dem Anrufer Informationen / Fehlercodes bereitstellen, die den Fehler sauber behandeln, den Benutzer gegebenenfalls benachrichtigen und die Ausführung fortsetzen können. Dies gilt normalerweise für Dinge wie einen Fehler, bei dem die Datei nicht gefunden wurde, oder einen anderen nicht schwerwiegenden Fehler.