Ich habe Konstanten NSString, die ich wie folgt aufrufen möchte:
[newString isEqualToString:CONSTANT_STRING];
Irgendein falscher Code hier?
Ich habe diese Warnung erhalten:
Durch das Senden von 'const NSString *' an einen Parameter vom Typ 'NSString *' werden Qualifizierer verworfen
Wie sollen diese deklariert werden?
objective-c
nsstring
warnings
constants
user4951
quelle
quelle
Antworten:
Sie sollten Ihre konstante Zeichenfolge wie folgt deklarieren:
anstatt:
Ersteres ist ein konstanter Zeiger auf ein
NSString
Objekt, während letzteres ein Zeiger auf ein konstantesNSString
Objekt ist.Die Verwendung von a
NSString * const
verhindert, dass Sie kSomeConstantString neu zuweisen, um auf ein anderesNSString
Objekt zu verweisen .Die Methode
isEqualToString:
erwartet ein Argument vom TypNSString *
. Wenn Sie einen Zeiger auf eine konstante Zeichenfolge (const NSString *
) übergeben, übergeben Sie etwas anderes als erwartet.Außerdem sind
NSString
Objekte bereits unveränderlich, so dassconst NSString
es bedeutungslos ist, sie herzustellen.quelle
const
Qualifikationsmerkmal gilt für den Begriff auf der linken Seite und nur dann für den Begriff auf der rechten Seite, wenn sich auf der linken Seite nichts befindet (z. B.const char *
und achar const *
sind nicht konstante Zeiger auf const char, sondernchar *const
ein konstanter Zeiger auf nicht konstante Zeichen ).#define ist schlecht, weil Sie nicht von Variablentypen profitieren können. Grundsätzlich ersetzt der Compiler alle Vorkommen beim Kompilieren (importieren Sie Constants.h, wann immer Sie es benötigen):
quelle
Nehmen Sie sich ein paar Minuten Zeit, um dies zu lesen. Ein gutes Lesen über Zeiger Hölle auf Konstanten und umgekehrt.
http://c-faq.com/decl/spiral.anderson.html
quelle