Objective C const NSString * vs NSString * const

我试图在我的.h文件中的NSString常量在我的.m中定义。 我明白那个
extern NSString * const variableName; 在.h和
NSString * const variableName = @"variableValue"; 是做到这一点的方法。 检查c教程我看到, const应该在variables定义之前。 我的问题是为什么它没有声明为extern const NSString * variableName; 在.h和const NSString * variableName = @"variableValue"; 在他们中。 我知道这是行不通的,因为我遇到编译器警告说'传递方法名的参数1:丢弃指针目标types的限定符'。 这是什么意思?

这是不一样的。 const修饰符可以应用于值或指向值的指针。

 int * const 

一个常量指针(不可修改)为一个整数(其值可以修改)

 const int * 

一个可修改的指向一个常量整数的指针(它的值不能被修改)

所以你可以想象:

 const int * const; 

常量指针不是指向常量的指针。 常量指针表示指针是常量。 例如,常量指针int * const ptr2; 表示ptr2是一个常量的指针。 这意味着ptr2不能被指向另一个整数。 但是,可以改变ptr2指向的整数。

而一个指向常量的指针const int * ptr1; 指示ptr1是指向一个常量整数的指针。 整数是不变的,不能改变。 但是,可以使指针ptr1指向某个其他整数。