NSString和NSMutableString有什么区别?

sek*_*har 12 objective-c

我需要澄清NSString和NSMutableString之间的区别.可以简单地扩展一下吗?

Meh*_*tri 36

假设你有这样的代码

NSString *s = [[NSString alloc] initWithString:@"Hello"];

s = [s stringByAppendingString:@"World"];
Run Code Online (Sandbox Code Playgroud)

和其他类似的代码

NSMutableString *ms = [[NSMutableString alloc] initWithString:@"Hello"];

[ms appendString:@"World"];
Run Code Online (Sandbox Code Playgroud)

在功能上,这两者都做同样的事情,除了一个区别 - 顶部代码块泄漏. - [NSString stringByAppendingString:]生成一个新的不可变NSString对象,然后告诉指针指向.但是,在此过程中,您可以孤立最初指向的NSString对象.如下更换线将消除泄漏:

s = [[s autorelease] stringByAppendingString:@"World"];
Run Code Online (Sandbox Code Playgroud)

  • 这还是ARC框架的问题吗? (2认同)

Fur*_*rqi 36

NSMutableStringNSString之间的区别在于

NSMutableString: NSMutableString对象提供了修改它们所代表的基础字符数组的方法,而NSString则没有.例如,NSMutableString公开了诸如appendString,deleteCharactersInRange,insertString,replaceOccurencesWithString等方法.所有这些方法都对字符串进行操作,因为它存在于内存中.

NSString:另一方面,如果你愿意的话,只有一个create-once-then-read-only字符串 ; 你会发现它的所有"操作"方法(substring,uppercaseString等)返回其他NSString对象,从不实际修改内存中的现有字符串.


And*_*ite 9

一旦NSString实例初始化,它就无法修改 - 它是"不可变的".没有NSString方法可以修改字符串的值.

另一方面,NSMutableString可以在初始化后进行修改.