请问定位的位置有何意义?
const
在Objective-C中声明变量时使用的关键字,例如:
extern const NSString * MY_CONSTANT;
对比
extern NSString * const MY_CONSTANT;
在赋值中使用第一个版本会产生关于“从指针目标类型丢弃限定符”的警告,因此我认为第二个版本确保了指针地址保持不变。但我真的很希望能得到更确切的答案。提前致谢!
请问定位的位置有何意义?
const
在Objective-C中声明变量时使用的关键字,例如:
extern const NSString * MY_CONSTANT;
对比
extern NSString * const MY_CONSTANT;
在赋值中使用第一个版本会产生关于“从指针目标类型丢弃限定符”的警告,因此我认为第二个版本确保了指针地址保持不变。但我真的很希望能得到更确切的答案。提前致谢!
const NSString
对象,而在第二种情况下,你声明了一个不可变指针指向一个可变的NSString
对象。*
符号出现的位置;它左边的是“指向”的类型,右边的描述了指针的属性。extern const NSString * MY_CONSTANT;
extern NSString * const MY_CONSTANT;
const
总是应用于const
之前的标记。在第二种情况下,const
表示指针是一个常量,而不是指向的东西。例外情况是当const
出现在任何可以有意义地成为常量的内容之前时,就像你的第一个例子一样。在这种情况下,它应用于第一个类型,即NSString
,因此它等同于extern NSString const * MY_CONSTANT
。
const NSString *blah
,因为即使是不可变的NSString也可能需要操作它的实例变量(例如缓存),而且一个NSString也可能是NSMutableString。你应该使用NSString *const blah
,这样你的其他代码就不会写成if (MY_CONST_STRING = local_string)
,也可以防止恶意插件将所有常量重写为@"I LIKE MONKEYS"
。 - Jeremy W. Sherman