Ich habe die Empfehlung von Apple gelesen unter Ausnahme Verwendung und NSError Verwendung:
Ich lese auch einige ähnliche Stapelüberlauffragen, die darüber diskutieren, ob eine Ausnahme verwendet werden soll oder nicht.
Ausnahmen in Objective-C verwenden
Ich versuche herauszufinden, Vor-und Nachteile der Verwendung Ausnahme als Fehlerbenachrichtigung / Handhabung Methode in iOS (Ehrlich gesagt, ich bin nicht mit Apples Satz zufrieden (es sagt, was zu tun ist, aber es sagt nicht, warum wir tun sollten es):
Sie sollten die Verwendung von Ausnahmen für die Programmierung oder reservieren unerwartete Laufzeitfehler, wie zum Beispiel der Zugriff außerhalb der Grenzen der Sammlung, Versuche, unveränderliche Objekte zu mutieren, eine ungültige Nachricht zu senden und Die Verbindung zum Fensterserver wird unterbrochen. Du kümmerst dich normalerweise um diese Art von Fehlern mit Ausnahmen, wenn eine Anwendung ist erstellt und nicht zur Laufzeit.
Ausnahmeverwendungsprofis:
Es ist nicht erforderlich, den gesamten Zwischencode zwischen fehlererzeugendem Code und Fehlerbehandlungscode zu ändern
Es verschmutzt keine Argumente und gibt keine Werte für Methoden zurück
Nachteile:
Bei allen manuell verwalteten Speicher-Codes müssen wir besonders vorsichtig sein (wir müssen es in automatisch wiederspeichernde Objekte einbinden, um sicherzustellen, dass Ressourcen freigegeben werden).
Wir müssen mit der Grenze zwischen unserem Code und Framework vorsichtig sein. Wenn unsere Ausnahmen unseren Code verlassen, könnten wir in Schwierigkeiten geraten (weil Frameworks Speicher manuell verwalten können)
Habe ich etwas vermisst? Gibt es zusätzliche Nachteile / Vorteile?
Es sieht so aus, als wären Ausnahmen für bibliotheksähnlichen Code in Ordnung (wenn wir ziemlich viel dicht gepackten Code haben, der nicht viel mit externen Systemen / Frameworks kommuniziert. Und es sieht so aus, als wäre die Ausnahme für den Code, der aktiv mit anderen Frameworks interagiert.
Beweist Ihre Erfahrung diese Theorie?
Ich freue mich über weitere Informationen zu diesem Thema.
tl; dr Ausnahmen sollten nur für fatale / nicht behebbare / Programmierfehler verwendet werden. Der Versuch, sie in Java oder anderen Umgebungen zu verwenden, in denen Ausnahmen möglich sind, führt zu einem zerbrechlicheren, schwer zu wartenden und schwer zu umstrukturierenden Code. Gleichzeitig wird die Fähigkeit zur Nutzung von System-Frameworks eingeschränkt.
Con: Wenn Sie Ausnahmen für Flusskontrolle und / oder behebbare Fehler in Ihrem Code verwenden, unterscheidet sich Ihr Code von Apples Entwurfsmustern.
Endergebnis?
• Sie können Apples APIs überhaupt nicht verwenden in Ihrem Code, es sei denn, die Grenze zwischen Ihrem Code und Apples immer isoliert das Ausnahmeverhalten
• Jedes Mal, wenn Sie einen Refactor verwenden, müssen Sie eine Menge Code für die Ausnahmebehandlung umgestalten
• Viele Dinge, die trivial sein sollten, werden sehr komplex sein; Zum Beispiel können Sie Ihre Objekte nicht in eine aufzählbare Sammlung stellen und sie ohne diese Aufzählung aufzählen - Block, for-Schleife, was auch immer ... - auch mit Ausnahmeverarbeitung an den Grenzen.
Überlegen Sie:
%Vor% Wenn doSomething
aus irgendeinem Grund eine Warnung auslöst, handelt es sich um eine Verletzung der dokumentierten Entwurfsmuster des Frameworks, da Sie eine Ausnahme über Frames in Apples Framework (s) werfen.
Das ist ein mächtiger großer Betrug. Groß genug, dass ich mir eine Reihe von Profis nicht vorstellen kann, die es aufwiegen.
Tags und Links objective-c ios