2012-03-28 8 views
0

Heute denke ich, ich könnte etwas gelernt haben (nicht sicher), ich bin nicht wirklich ein Obj-c-Programmierer, mehr der Java-Typ, aber eine iPhone App zusammen bauen mit jemand hat mir dies, also hoffentlich jemand kann mir helfen zu erklären, was und warum:Assertion außerhalb eines try/fangen in obj-c

Ich habe einige Code in einem @try {..} und @catch (NSException * e) {..} und mein Gedanke war alles würde von diesem gefangen genommen worden, aber die anderen Entwickler setzen und assert(false); am Ende der Funktion, nach de fangen.

Warum?

Antwort

1

assert(3) ist nicht Teil des Objective-C selbst. Es ist Teil des C-Standards. Überprüfen Sie die man page aus. Von der C-Spezifikation, Abschnitt 7.2.1.1 Der assert Makro:

Synopsis

#include <assert.h> 
    void assert(scalar expression); 

Beschreibung

Die assert Makro stellt diagnostische Tests in Programme; es erweitert sich zu einem void expression. Wenn es ausgeführt wird, wenn expression (die einen skalaren Typ haben soll) ist falsch (dh Vergleiche gleich 0), das assert Makro schreibt Informationen über den bestimmten Aufruf fehlgeschlagen (einschließlich der Text des Arguments, der Name der Quelldatei, die Anzahl der Source-Leitung, und der Namen der einschließende Funktion - letztere jeweils die Werte der Vorverarbeitung Makros __FILE__ und __LINE__ und der Identifizierers __func__) auf dem Standard-Fehlerstrom in einem implementierungsdefinierten Format. Anschließend ruft sie die abort Funktion.

So assert(false) wird nur das Programm an diesem Punkt abstürzen.

+0

ok, so dass das Programm abstürzt, wenn es außerhalb des Fangs kommt, aber das war mein ganzer Punkt, es nicht abstürzen zu lassen und alles zu fangen :) deshalb verstehe ich seine Behauptung nicht, die außerhalb des Fangs ist ... – Bokw

+0

ohne den Code zu sehen, das ist schwer zu sagen, ich habe Angst. Sie könnten in Verbindung mit diesem anderen Programmierer bekommen haben. –

+0

thnx carl, ich werde nxt woche – Bokw