我正在使用NSUserDefaults来存储用户偏好设置。我记得在某个地方读到将键设置为常量是一个好主意 - 我同意这一点。以下代码是我目前拥有的:
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:@"polygonNumberOfSides"];
我试着把这个改成:
@implementation Controller
NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";
-(void)savePolygonInfo {
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:kPolygonNumberOfSides];
}
虽然这样做有效,但会产生 "warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type
"。我想保持我的代码没有编译器警告。该如何解决这个警告?
NSString * const foo
之所以有效,是因为NSString
是不可更改的,并且指针是不可更改的,因此它永远不会改变,对吧?另外,我记得在 C++ 中,const
隐式地是static
(编译器优化),所以不需要显式声明。这在这里也是正确的吗? - Ternary