Was ist der beste Weg, um eine Ausnahme in objective-c/cocoa zu werfen?
Antworten
Zu viele Anzeigen?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.
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
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