Sie sollten Ausnahmen unbedingt vermeiden für Dinge wie das Parsen von Zahlen aus Zeichenketten. In Objective-C stehen Ausnahmen für Fehler des Programmierers, nicht für Fehler bei der Benutzereingabe oder sogar für nicht verfügbare Dateien. (Das liegt zum Teil daran, dass die Behandlung von Ausnahmen immer kostspieliger und komplexer ist als die "konventionelle" Fehlerbehandlung. Ungeachtet der Tatsache, dass Eingabe von @try
Blöcke sind "Nullkosten" in 64-Bit ist es immer noch langsam, wenn tatsächlich eine Ausnahme ausgelöst wird). Natürlich dürfen Sie Ausnahmen verwenden, wie Sie wollen, aber das ist nicht der Weg von Cocoa, und Sie werden sich mit anderem Objective-C-Code in die Haare kriegen. Leute, die Ihren Code verwenden, werden unglaublich verärgert sein, dass Sie Ausnahmen in Fällen auslösen, die eigentlich nur zu einem Fehler führen sollten.
Von Apples eigene Dokumente :
"In vielen Umgebungen ist die Verwendung von Ausnahmen ziemlich alltäglich. Sie können beispielsweise eine Ausnahme auslösen, um zu signalisieren, dass eine Routine nicht normal ausgeführt werden konnte, z. B. wenn eine Datei fehlt oder Daten nicht richtig geparst werden konnten. Ausnahmen sind in Objective-C ressourcenintensiv. Sie sollten Ausnahmen nicht für die allgemeine Ablaufsteuerung oder einfach nur zur Anzeige von Fehlern verwenden. Stattdessen sollten Sie den Rückgabewert einer Methode oder Funktion verwenden, um anzuzeigen, dass ein Fehler aufgetreten ist, und Informationen über das Problem in einem Fehlerobjekt bereitstellen."
Schauen Sie sich an, wie eingebaute Cocoa-Klassen Fehler wie diesen behandeln. Zum Beispiel, NSString hat Methoden wie -floatValue
die 0 zurückgeben, wenn sie fehlschlagen. Eine bessere Lösung für Ihre spezielle Situation könnte sein, wie NSScanner tut es, wie zum Beispiel in -scanFloat:
- akzeptiert einen Zeiger auf das Feld, in dem das Ergebnis gespeichert werden soll, und gibt YES
o NO
je nachdem, ob das Parsen erfolgreich war.
Abgesehen von den Obejctive-C Konventionen und Best Practices ist NSError viel robuster und flexibler als NSException und erlaubt es dem Aufrufer, das Problem effektiv zu ignorieren, wenn er das möchte. Ich empfehle die Lektüre der Fehlerbehandlung Programmierhandbuch für Cocoa . Anmerkung: Wenn Sie eine NSError**
Param, empfehle ich Ihnen dringend, auch so zu gestalten, dass der Client die NULL
wenn sie keine Fehlerinformationen erhalten möchten. Jede Cocoa-Klasse, die ich kenne, tut dies für Fehler, einschließlich NSString.
Auch wenn der portierte Code am Ende völlig anders aussieht als der Java-Code, sollten Sie sich darüber im Klaren sein, dass er von Objective-C-Code verwendet wird und nicht von denselben Clients wie das Java-Pendant. Passen Sie auf jeden Fall die Idiome der Sprache an. Der portierte Code wird kein Spiegelbild des Java-Codes sein, aber er wird dadurch viel korrekter (für Objective-C) sein.