【问题标题】:what is actual difference between NSString and NSMutableString in objective C with the help of example? [duplicate]借助示例,目标 C 中的 NSString 和 NSMutableString 之间的实际区别是什么? [复制]
【发布时间】:2013-05-03 20:53:01
【问题描述】:

Objective-C 中 NSString 和 NSMutable String 之间的实际区别是什么? 我已经搜索了很多但没有得到任何答案..我知道 NSString 是不可变对象,而 NSMutableString 是可变对象,但我想借助示例了解它们之间的区别..请帮助我..

现在问题已经解决了..

【问题讨论】:

标签: objective-c nsstring nsmutablestring


【解决方案1】:

不可变字符串.....

NSString *str1 = @"Hello Testing";
NSString *str2 = str1;

替换第二个字符串

str2 = @"Hello hehehe";

并列出它们的当前值

NSLog(@"str1 = %@, str2 = %@", str1, str2);
//logs as below
//str1 = Hello Testing, str2 = Hello hehehe

可变字符串

设置两个变量指向同一个字符串

NSMutableString * str1 = [NSMutableString stringWithString:@"Hello Testing"];
NSMutableString * str2 = str1;

替换第二个字符串

[str2 setString:@"Hello ikilimnik"];

//并列出它们的当前值

NSLog(@"str1 = %@, str2 = %@", str1, str2);
//logs as below
//str1 = Hello ikilimnik, str2 = Hello ikilimnik

请注意,当您使用不可变字符串类时,replace 字符串的唯一方法是创建一个新字符串并更新您的变量 str2 以指向它。

但这不会影响 str1 指向的内容,因此它仍会引用原始字符串。

NSMutableString 示例中,我们不创建第二个字符串,而是更改 现有的Hello Testing 字符串。由于两个变量继续指向同一个字符串对象,它们都会在调用NSLog时报告新值。

区分指针变量和它指向的实际对象很重要。 NSString 对象是不可变的,但这并不能阻止您更改指向字符串的变量的值。

【讨论】:

  • 对于不可变:为什么 str2 在 str2=str1 之后不立即变为不可变?怎么还能得到“Hello hehehe”的新值?
【解决方案2】:

NSMutableString 和 NSString 的区别:

NSMutableString:NSMutableString 对象提供了修改它们所代表的底层字符数组的方法,而 NSString 没有。 NSMutableString 公开了 appendString、deleteCharactersInRange、insertString、replaceOccurencesWithString 等方法。所有这些方法都对内存中存在的字符串进行操作。

NSString:如果你愿意,它是一个create-once-then-read-only string;你会发现它所有的“操作”方法(子字符串、大写字符串等)都返回了其他的 NSString 对象,并且从未真正修改内存中的现有字符串。

例子:

NSString *simpleString = [[NSString alloc] initWithString:@"simple String"];
simpleString = [simpleString stringByAppendingString:@"OK"];


NSMutableString *mutableString = [[NSMutableString alloc] initWithString:@"MutableString"];
[mutableString appendString:@"OK"];

这两者在功能上都做同样的事情,除了 - 顶部代码块泄漏

 [NSString stringByAppendingString:]

生成一个新的不可变 NSString 对象,然后你告诉指针指向它。然而,在这个过程中,你将它最初指向的 NSString 对象孤立了。

【讨论】:

  • @aniMotwani 注意添加参考链接,从您粘贴“NSMutableString 和 NSString 之间的差异”部分的位置。
【解决方案3】:

在Objective C中,字符串对象有两种类型,一种是可变的,一种是不可变的。

要创建不可变字符串,我们使用NSString,要创建可变字符串,我们使用NSMutableString

如果我们使用NSString 创建一个字符串对象,它就是一个不可变的字符串对象。这意味着该字符串随后不能以任何方式进行修改。 (尽管任何 NSString 指针都可以重新分配给新的 NSString 对象。)

 NSString *string1 = @"immutable String";

对于可变字符串,我们使用NSMutableString,它是NSString 的子类。

分配可变字符串对象:

NSMutableString *string2 = [NSMutableString stringWithString:@"Mutable String"];

NSMutableString *string2 = [NSMutableString stringWithString: string1]; // string1 is a NSString(immutable)

【讨论】:

  • Downvoted:尝试为您编辑此内容以阐明语言,但我建议讨论不可变字符串与可变字符串的用例。这似乎是揭示实际差异的方法,而不仅仅是句法初始化差异。接受的答案做得很好。下次祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2021-06-12
  • 1970-01-01
  • 2013-08-02
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多