2010-03-30 14 views
11

Wir schreiben eine API für iPhone-Entwickler und wir wissen nicht, was die beste Praxis für die Ausnahmebehandlung ist. Wir haben uns die NSError, POSIX-Standardmethode, NSExceptionWas sind Best Practices für die Fehlerbehandlung beim Schreiben einer API für das iPhone?

angesehen. Welche Konvention verwenden die meisten APIs? Welches ist das "Objective-C-freundlichste"?

+0

Diese Frage könnte ein Duplikat von http://stackoverflow.com/questions/1503348/returning-errors-in-objective-c und http://stackoverflow.com/questions/2169728/how-shouldi- Handle-Fehler-in-api –

Antwort

14

Von der Introduction to Exception Programming Topics:

Wichtige: Sie sollten die Verwendung von Ausnahmen für die Programmierung oder unerwartete Laufzeitfehler wie Out-of-bounds Sammlung Zugang zu reservieren, versucht unveränderliche Objekte zu mutieren, eine ungültige Senden Nachricht, und die Verbindung zum Fensterserver zu verlieren. Normalerweise kümmern Sie sich mit Ausnahmen um diese Art von Fehlern, wenn eine Anwendung erstellt wird und nicht zur Laufzeit.

...

Statt Ausnahmen, Fehlerobjekte (NSError) und der Kakao-Fehler-Abgabemechanismus sind der empfohlene Weg, erwarteten Fehler in Cocoa-Anwendungen zu kommunizieren. Weitere Informationen finden Sie unter Error Handling Programming Guide For Cocoa.

So wie ich es verstehe, nur Ausnahmen verwenden, wenn etwas tödlich falsch ist. Andernfalls verwenden Sie NSError Objekte.

2

+1 für NSError.

Ich vergesse, wo in den Apple Docs ich lese das, aber ich erinnere mich auch daran, sie ermutigen die Codierung Philosophie "versuchen Sie zuerst, dann auf Fehler überprüfen," im Gegensatz zu "auf Gültigkeit überprüfen, dann die Operation." Zum Beispiel, anstatt zu sehen, ob das Netzwerk verfügbar ist, bevor Sie es verwenden, versuchen Sie einfach, es zu benutzen und auf einen Fehler zu antworten, wenn/wenn Sie einen zurückbekommen. Ich stimme dieser Philosophie für viele Anwendungsfälle zu, weil (a) die Gültigkeitsprüfung auf den Moment des Handelns verlagert wird, also gewissermaßen genauer und (b, subjektiv) macht es mehr Spaß mit Code zu arbeiten dieses Muster.

Zusammenfassend ist der Vorschlag, NSError zu verwenden, und sofortige Rückmeldung mit NSError** Parameter zu geben, die NULL akzeptieren, um sehr freundlich zu Ihren API-Benutzern zu sein! Dieses Muster wird auch an mehreren Stellen in Cocoa/Touch festgelegt; zum Beispiel die NSString Methode writeToFile:atomically:encoding:error:.

Verwandte Themen