通常我使用第一个来定义const,但我不清楚以下区别。
static NSString* kFetcherCallbackThreadKey = @"_callbackThread";
static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";
NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";
static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;
答案 0 :(得分:2)
static
表示该变量只能在其声明的编译单元中访问 - 实质上是此源文件。 const
意味着它的价值永远不会改变。根据您的要求,您可以使用一个,两个或全部。
答案 1 :(得分:2)
在C中,在函数外部使用的static
关键字用于声明只能从其声明的文件中访问的符号。一种“私人”全局变量。
const关键字表示“常量”。读取,该值无法修改。 请注意,这两个陈述是不同的:
const int * x;
int * const x;
第一个定义了一个指向常量整数的指针(它的值不能被修改,但它可以指向其他东西)。 第二个定义了一个指向整数的常量指针(指针值不能修改,但int的值可能是)。 所以你可以完美地拥有:
const int * const x;
所以在你的情况下:
static NSString* kFetcherCallbackThreadKey = @"_callbackThread";
指向NSString实例的指针,该实例只能从声明它的文件中访问。
static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";
指向NSString实例的常量指针,该实例只能从声明它的文件中访问。
NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";
指向可从项目的其他文件访问的NSString实例的常量指针。
static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;
常量整数,只能从声明它的文件中访问。
答案 2 :(得分:0)
这是一个静态字符串,它对于类的所有实例(静态)都是相同的引用。如果您在一个实例中更改它,它将在所有其他实例中更改。
static NSString* kFetcherCallbackThreadKey = @"_callbackThread";
这是指向常量对象的NSString指针,该对象也在所有实例(静态)之间共享。 const
指令使变量不可变。
static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";
这是一个指向常量NSString对象的指针。它可以为每个类设置一个不同的实例(如果NSStrings没有被编译器实现,我不确定它们是否存在),但是不能更改(const)。
NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";
这是一个常量静态整数。它将在类的所有实例(静态)之间共享,并且不能更改(const)。
static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;