Ich verwende NSUSerDefaults, um Benutzereinstellungen zu speichern. Ich erinnere mich, dass ich irgendwo gelesen habe, dass es eine gute Idee ist, die Schlüssel als Konstanten festzulegen - und ich stimme zu. Der folgende Code ist der, den ich derzeit habe:
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:@"polygonNumberOfSides"];
Ich habe versucht, dies zu ändern in:
@implementation Controller
NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";
-(void)savePolygonInfo {
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:kPolygonNumberOfSides];
}
Während dies funktioniert, erzeugt es " warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type
". Ich möchte meinen Code frei von Compiler-Warnungen halten. Wie kann ich diese Warnung beheben?
NSString * const foo
funktioniert, weilNSString
unveränderlich ist und der Zeiger unveränderlich ist, so dass er sich nie richtig ändern kann? Ich erinnere mich auch an C ++,const
das implizit iststatic
(eine Compiler-Optimierung), so dass es nicht nötig ist, es aufzurufen. Gilt das auch hier?Nicht
const
mit Objective-C-Objekten verwenden, sie wurden nicht wirklich dafür verwendet.NSString
Objekte (unter anderem) sind aufgrund ihres Designs bereits standardmäßig unveränderlich, so dassconst
es nutzlos ist, sie herzustellen.Wie von e.James vorgeschlagen , können Sie ein verwenden
NSString * const
, das ein konstanter Zeiger auf ein istNSString
. Dies unterscheidet sich geringfügig von aconst NSString *
(äquivalent zuNSString const *
), das ein Zeiger auf eine Konstante istNSString
. Die Verwendung vonNSString * const
verhindert, dass Sie neu zuweisenkPoly
, um auf ein neuesNSString
Objekt zu verweisen .quelle
const
bedeutet auch, dass Sie es nicht neu zuweisen können. Ich glaube, ich hatte das falsch gemacht.Für den Zugriff von anderen Klassen:
.h
.m
Für den Zugriff nur innerhalb der aktuellen Klasse:
.m
quelle
Ich würde vorschlagen, die Konstante noch aussagekräftiger zu gestalten. Eine Konstante für die Anzahl der Seiten eines Polygons kann von überall kommen. Wie wäre es mit:
stattdessen.
quelle
Weitere Hintergrundinformationen zu diesem Problem finden Sie in einem hervorragenden Artikel auf Wikipedia, in dem die konstante Syntax mit Zeigern erläutert wird: http://en.wikipedia.org/wiki/Const_correctness#Pointers_and_references
quelle