Objective c const关键字在变量声明中的定位意义

Objective c const关键字在变量声明中的定位意义,objective-c,constants,keyword,compiler-warnings,Objective C,Constants,Keyword,Compiler Warnings,该项目定位的意义是什么 const 在Objective-C中声明变量时的关键字,例如: extern const NSString * MY_CONSTANT; 对 extern NSString * const MY_CONSTANT; 在赋值中使用第一个版本会产生关于“来自指针目标类型的限定符”被丢弃的警告,因此我假设第二个版本确保指针地址保持不变。不过,我真的希望能有一个更明确的答案。非常感谢 在第一种情况下,您将声明一个指向不可变const NSString对象的可变指针,而在第

该项目定位的意义是什么

const
在Objective-C中声明变量时的关键字,例如:

extern const NSString * MY_CONSTANT;

extern NSString * const MY_CONSTANT;

在赋值中使用第一个版本会产生关于“来自指针目标类型的限定符”被丢弃的警告,因此我假设第二个版本确保指针地址保持不变。不过,我真的希望能有一个更明确的答案。非常感谢

在第一种情况下,您将声明一个指向不可变
const NSString
对象的可变指针,而在第二种情况下,您将声明一个指向不可变
NSString
对象的不可变指针


记住这一点的简单方法是查看
*
所在的位置;它左边的所有内容都是“指针对象”类型,右边的所有内容都描述指针的属性。

通常,
const
始终应用于
const
之前的令牌。在第二种情况下,
const
表示指针是常量,而不是指向的对象。例外情况是,
const
出现在任何有意义的常量之前,如第一个示例所示。在本例中,它适用于第一种类型,在本例中为
NSString
,因此它相当于
extern NSString const*MY_常量

extern const NSString * MY_CONSTANT; 
-指针是可变的,但指针指向的数据是常量

 extern NSString * const MY_CONSTANT; 

-指针常量,但指针指向的数据不是常量。

ezod是正确的-但是,当NSString声明为字符串常量时,我看不出添加常量的原因。您不能释放NSString,也不能更改它(它是不可变的)。。。那么,为什么还要麻烦使用常量呢?没有人使用
const NSString*blah
,因为即使是不可变的NSString也可能需要操作其ivar(例如缓存),并且NSString也可能是NSMutableString。如果(MY_const_STRING=local_STRING)和恶意插件无法将您的所有常量重写为
@“我喜欢猴子”
,那么您使用的
NSString*const blah
使您的其他一些代码无法执行
。我希望我可以设置两个可接受的答案,这两个答案都帮助我理解这一点。非常感谢大家!
 extern NSString * const MY_CONSTANT;