我已经阅读了几本书......以及在线...关于不可变和可变的字符串.他们声称"不可变的字符串"无法改变.(但他们从未定义"变化".)
如果不使用NSMutableString,可以更改哪些NSStrings?
该字符串包含"鲶鱼"......后来我尝试将其更改为"cat".(相同的字母,只是更短.)
它包含"猫"......我试图将其改为"鲶鱼".(类似的开始...但只是做得更久.)
我将"猫"改为"CAT".(相同的字母,但情况已经改变.)
我把"猫"变成了"狗".(完全不同的字符串,但长度相同.)
我将"猫"改为"山茱萸".(完全不同的字符串,但更长.)
答案是 - 没有.不可变意味着它不能变成与原始字符串不同的任何东西.每个角色保持不变,长度不能改变等等.一旦定义了你就不能改变关于那个字符串的任何东西.如果要使其更长或更短或更改任何字符,则需要创建一个新字符串(或使用NSMutableString开头).
如果我声明一个变量:
NSString * var; // Here some code giving a new value to var
什么是不可变的是指向的对象var
,而不是var
它本身.
这意味着我无法更改指向的对象的任何内容var
,但我可以更改指向的对象.
您提及的操作都不允许var
,但您可以var
使用另一个不同的字符串进行分配:
NSString * anotherVar; // Here some code giving a new value to anotherVar var = anotherVar; // This is allowed (with a memory leak if GC is disabled) // The following is also allowed: -stringWithFormat: creates a new object var = [var stringWithFormat:@"%@ with more chars", var];