#define oder const string*
Ich weiß, diese Frage wurde schon mehrfach gefragt, aber mir ist es etwas anders. Vor dem schließen dieses als doppelte, Lesen Sie es bitte vollständig auf.
Es gibt viele Beiträge auf stack overflow, die sagt, "Persönlich, ich hasse MAKROS, verwenden Sie nicht, dass die Scheiße". Ich habe alle gelesen und mein Fall ist anders. Ich werde versuchen, zu definieren, verwendeten URLs in eine software (iOS-app) mit #define Makros.
Ich bin damit einverstanden, dass die Verwendung von const-strings ist eine bessere Praxis als #define-Makros. Aber in einer zunehmend REST-basierte API-Welt akzeptiert, query-Parameter als Teil der URL, wie können Sie immer noch verwenden, const strings repräsentieren eine URL verpasst?
Statt http://api.myblog.com/posts?entryid=%@
ein API-Server, der folgende REST-Prinzipien hätte
http://api.blog.com/posts/entries/[entryid]
In der ehemaligen Typ, URL http://api.myblog.com/posts für alle Einträge und ändern Sie sich nicht. Ein const string möglich war.
In der letzteren Art, die URL ändert sich bei jedem Eintrag und ich benutze ein Makro, das erweitert, um eine vollständige URL wie diese.
#define GET_ENTRY_URL(__MY_ENTRY_ID__) [NSString stringWithFormat:@"http://api.myblog.com/posts/entries/%@", __MY_ENTRY_ID__];
Gibt es irgendwelche design-Fehler in meiner Methode?
Würde gerne wissen Ihre Eingabe.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suchen, aus der Sicht des Compilers, #define ist eine Präprozessor-Direktive (siehe die definition in c, http://en.wikipedia.org/wiki/C_preprocessor).
In diesem Fall, der compiler könnte den gesamten text ersetzt, vor dem kompilieren Ihres codes.
z.B.: wenn Sie definieren:
könnte es sein, ersetzen jedes vorkommen von GET_ENTRY_URL(x) mit [NSString ..., x] in Ihre codes. Möglicherweise Instanzen können erstellt werden überall, wo wir das makro verwenden, wenn die Umsetzung in objective-c ist nach dieser.
static const/variable scheint der bessere Weg zu sein.
Was ich in meiner app definieren const für den Basis-Pfad und einen const für jeden spezifischen Weg bei der substitution format-codes in den Weg, wenn nötig.
Ich dann die URL erstellen zur Laufzeit für jede API wie folgt:
stringByAppendingPathComponent:
gibt nur einen Schrägstrich, D. H.http:/...
es scheint, dass diese Methode verwendet für die Datei-Pfad, nicht die url. Stattdessen verwende ichstringByAppendingString:
. 🙂