Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 常数值的修正_Ios_Objective C_Pointers_Constants - Fatal编程技术网

Ios 常数值的修正

Ios 常数值的修正,ios,objective-c,pointers,constants,Ios,Objective C,Pointers,Constants,我理解两者的区别 NSString * const myString = @"Bar" 这是指向NSString的不可变指针 然后我们有: NSMutableString const * myMutableString = [[NSMutableString alloc]initWithString:@"Bar"] 这是指向常量NSMutableString的指针。myMutableString的值不能更改 那么为什么我们可以这样做呢 [myMutableString追加:@“Foo”] 没

我理解两者的区别

NSString * const myString = @"Bar"
这是指向NSString的不可变指针

然后我们有:

NSMutableString const * myMutableString = [[NSMutableString alloc]initWithString:@"Bar"]
这是指向常量NSMutableString的指针。myMutableString的值不能更改

那么为什么我们可以这样做呢 [myMutableString追加:@“Foo”]

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

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

谢谢

NSMutableString const * myMutableString = [[NSMutableString alloc]initWithString:@"Bar"]
为此,您可以更改“myMutableString”的值,因为它指向静态位置,该位置的值可能不同,但指向位置不能

因此,如果您遇到应用程序基url之类的情况,您必须定义应用程序中的每个服务调用都相同的url,如下所示:

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";

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

您正在混淆对象的易变性和引用的易变性。引用是一个常量,但它引用的对象是可变的。即使我可以使用常量更新引用,比如NSMutableString const*myMutableString=[[NSMutableString alloc]initWithString:@“Bar”];[myMutableString appendString:@“Hello World”];myMutableString=[[NSMutableString alloc]initWithString:@“hvjhj”];它已编译并运行!您应该声明可变字符串,比如
NSMutableString*constmymutablestring=[[NSMutableString alloc]initWithString:@“Foo”]!!那你就不能给它赋值了!您的声明对于可变的声明是错误的。对于不可变字符串,它是正确的!