In einer @try-@catch-@finally-block, ist es gut verwenden schließlich oder normal weiter?
Dies ist ein einfaches Objective-C Frage.
Wenn Sie ein @try
der Workflow kann ausgeführt werden in 2 Arten
- Wenn einige NSException erscheinen, wird der code sofort
@catch
block und als@finally
- Wenn nicht, fertig zum ausführen der
@try
block und als Lauf@finally
Also, was ist der Unterschied zu verwenden oder nicht verwenden Sie die @finally
block? Wenn ich nur:
-(void)function{
@try {
...
}
@catch (NSException *exception) {
...
}
>>>The workflow will run this line in any case?
}
Als der rest der Funktion ausgeführt wird, oder nur die @catch
block, wenn eine NSException erstellt?
- Siehe stackoverflow.com/questions/547791/why-use-finally-in-c . Nicht objective-c im Zusammenhang per se, aber ich vermute, es funktioniert genauso: Manchmal wird Ihre catch-block wird, wollen ausbrechen aus dem Fluss, das ist, wenn Sie möchten, dass ein finally-block ausgeführt egal, ob oder nicht der rest der Funktion wird fortgesetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Ein @finally-block enthält code, der ausgeführt werden muss, ob eine Ausnahme ausgelöst wird oder nicht."
Funktioniert der code im finally-get ausführen, nachdem eine Rückkehr in Objective-C?
Finally-block existiert, der release/bereinigen von Ressourcen, wie offene Steckdosen, offene Dateien, Datenbank-locks, semaphore sperren, und so weiter.
Tritt ein Fehler innerhalb des catch-block oder catch-block rethrows die Ausnahme, dann die Zeile:
wird nicht ausgeführt. Allerdings ist der code in der finally-block ausgeführt werden soll. Der finally-block ist die Letzte, beste chance, Ausfahrt sauber in einer Anwendung, die über den Absturz. Auch wenn die Anwendung nicht Abstürzen, es ist immer noch der beste Ort, um cleanup-Ressourcen, da der code innerhalb der finally-block ist eher ausgeführt werden, unter unerwarteten Bedingungen als code, der außerhalb der finally-block.
finally
im try/catch-Schema, ist für die Ausführung von code muss immer ausgeführt, ob eine exception Auftritt oder nicht. In Objective-C könnte dies Freigabe eines Objekts, das in einem anderen Kontext könnte es die Freigabe einer Sperre oder schließen einer Datei.Ein paar Dinge zu beachten:
verwenden Sie die @finally-block für etwas (z.B. Aufräumen), das muss passieren
selbst wenn eine Ausnahme Auftritt
NSException, es kann (und wohl sollte) verändert werden, um sich bestimmte
Ausnahmen. In diesem Fall wird die @catch-block, zusammen mit den folgenden code
die @try-@catch-@endlich, würde nicht ausgeführt werden, abhängig von der Ausnahme
@try
/@finally
um das bundle zu laden, aber Sie sagen, es sollte hier nicht benutzt werden?NSError
Muster, um Erfolg/Misserfolg anzuzeigen. Ausnahmen sind reserviert für nicht behebbare Fehler.Paar wichtige Punkte, die übersehen wurden, die in anderen Antworten hier.
So, die ganze Diskussion über die Verwendung von @endlich hier ein wenig übertrieben.