This question already has answers here:
What does the const specifier do, before a pointer to object?

(3个答案)


3年前关闭。




我了解不同之处
NSString * const myString = @"Bar"

这是指向NSString的不变指针。

然后我们有:
NSMutableString const * myMutableString = [[NSMutableString alloc]initWithString:@"Bar"]

这是指向const NSMutableString的指针。 myMutableString的值应该不能更改。

为什么可以这样做?:
[myMutableString append:@“Foo”];

没有编译器错误,并且可以正常工作。它允许我更改值。

那么在哪种情况下可以使用常量对象?

谢谢!

最佳答案

NSMutableString const * myMutableString = [[NSMutableString alloc]initWithString:@"Bar"]

为此,您可以更改“myMutableString”的值,因为它指向静态位置,该位置的值可能有所不同,但指向位置不能

因此,如果您遇到某种情况(例如应用程序基本网址),则必须定义应用程序中的每个服务调用都相同的方法,如下所示:

1)最简单的方法:
// Prefs.h
#define APP_BASE_URL @"app_base_url"

2)更好的方法:
// Prefs.h
extern NSString * const APP_BASE_URL;

// Prefs.m
NSString * const APP_BASE_URL = @"app_base_url";

第二个好处是更改常数的值不会导致整个程序的重建。

关于ios - 修改常数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43866806/

10-12 16:08