以下成本定义有何不同?

时间:2011-07-18 16:44:59

标签: objective-c const

通常我使用第一个来定义const,但我不清楚以下区别。

static NSString* kFetcherCallbackThreadKey = @"_callbackThread";

static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";

NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";

static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;

3 个答案:

答案 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;