426 Stimmen

eine Ausnahme in objective-c/cocoa auslösen

Was ist der beste Weg, um eine Ausnahme in objective-c/cocoa zu werfen?

14voto

Psycho Punkte 1863

Seit ObjC 2.0 sind Objective-C-Ausnahmen nicht mehr ein Wrapper für C's setjmp() longjmp(), und sind kompatibel mit C++-Ausnahmen, die @try ist "kostenlos", aber das Werfen und Abfangen von Ausnahmen ist viel teurer.

Wie auch immer, Behauptungen (mit NSAssert und NSCAssert Makro-Familie) werfen NSException, und dass vernünftig, sie als Ries Staaten zu verwenden.

8voto

Jason Fuerstenberg Punkte 1321

Verwenden Sie NSError, um Fehler anstelle von Ausnahmen zu kommunizieren.

Kurze Hinweise zu NSError:

  • NSError ermöglicht Fehlercodes im C-Stil (Integer), um die Ursache eindeutig zu identifizieren und es dem Error-Handler hoffentlich zu ermöglichen, den Fehler zu beheben. Sie können Fehlercodes aus C-Bibliotheken wie SQLite sehr einfach in NSError-Instanzen verpacken.

  • NSError hat auch den Vorteil, dass es ein Objekt ist und eine Möglichkeit bietet, den Fehler mit seinem userInfo-Wörterbuchmitglied genauer zu beschreiben.

  • Aber das Beste von allem ist, dass NSError NICHT geworfen werden kann, so dass ein proaktiverer Ansatz zur Fehlerbehandlung gefördert wird, im Gegensatz zu anderen Sprachen, die die heiße Kartoffel einfach immer weiter nach oben auf den Aufrufstapel werfen, wo sie dann nur noch dem Benutzer gemeldet und nicht mehr sinnvoll behandelt werden kann (nicht, wenn man an den wichtigsten Grundsatz von OOP glaubt, nämlich Informationen zu verbergen).

Referenz-Link: Referenz

7voto

Johannes Punkte 11026

So habe ich es in "The Big Nerd Ranch Guide (4. Auflage)" gelernt:

@throw [NSException exceptionWithName:@"Something is not right exception"
                               reason:@"Can't perform this operation because of this or that"
                             userInfo:nil];

6voto

Subbu Punkte 2033

Sie können zwei Methoden verwenden, um Ausnahmen im Try-Catch-Block zu erzeugen

@throw[NSException exceptionWithName];

oder die zweite Methode

NSException e;
[e raise];

3voto

R. van Twisk Punkte 424

Ich bin der Meinung, dass Sie niemals Ausnahmen verwenden sollten, um den normalen Programmablauf zu kontrollieren. Aber Ausnahmen sollten immer dann ausgelöst werden, wenn ein Wert nicht mit einem gewünschten Wert übereinstimmt.

Wenn zum Beispiel eine Funktion einen Wert akzeptiert und dieser Wert niemals Null sein darf, dann ist es in Ordnung, eine Exception zu werfen, anstatt zu versuchen, etwas 'Schlaues' zu tun...

Ries

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X