#define oder const string *

8

Ich weiß, dass diese Frage mehrmals gestellt wurde, aber meine ist etwas anders. Bevor Sie dieses als Duplikat schließen, lesen Sie es bitte vollständig. Es gibt viele Posts auf Stack-Überlauf, die sagen: "Ich persönlich hasse MACROS, benutze diesen Scheiß nicht". Ich habe all diese gelesen und mein Fall ist anders. Ich versuche, URLs zu definieren, die in einer Software (iOS-App) mit #define-Makros verwendet werden.

Ich stimme zu, dass die Verwendung von const-Strings eine bessere Vorgehensweise ist als #define-Makros. Aber in einer zunehmend REST-basierten API-Welt, die Abfrageparameter als Teil von URL akzeptiert, wie können Sie const-Zeichenfolgen immer noch verwenden, um eine URL darzustellen, die sich ändert?

Anstelle von Ссылка Ein API-Server, der den REST-Prinzipien folgen würde Ссылка

Im vorherigen Typ ist die URL für alle Einträge Ссылка und ändert sich nicht. Eine Const-Zeichenfolge war möglich.

Bei letzterem Typ ändert sich die URL mit jedem Eintrag und ich verwende ein Makro, das auf eine vollständige URL wie diese erweitert wird.

%Vor%

Gibt es Konstruktionsfehler in meiner Methode? Möchte Ihre Eingaben wissen.

Danke.

    
Mugunth 07.11.2011, 04:52
quelle

2 Antworten

4

Aus der Perspektive des Compilers betrachtet, ist #define eine Präprozessor-Direktive (siehe die Definition in c, Ссылка ) ).

In diesem Fall kann der Compiler den gesamten Text ersetzen, bevor er die Codes kompiliert.

z. B. wenn Sie definieren:

%Vor%

Es könnte jedes Vorkommen von GET_ENTRY_URL (x) durch [NSString ..., x] in Ihren Codes ersetzen. Potenziell können Instanzen überall dort erstellt werden, wo wir das Makro verwenden, wenn die Implementierung von objective-c diesem folgt.

static const / variable scheint ein besserer Weg zu sein.

    
alvinsj 07.11.2011 05:50
quelle
2

Was ich in meiner App getan habe, war eine Konstante für den Basispfad und eine Konstante für jeden spezifischen Pfad mit Ersetzungsformatcodes innerhalb des Pfades, wenn nötig.

%Vor%

Ich konstruiere dann die URL zur Laufzeit für jede API wie folgt:

%Vor%     
XJones 07.11.2011 09:00
quelle