在示例的帮助下,目标C中的NSString和NSMutableString之间的实际区别是什么?

时间:2013-05-09 11:32:27

标签: objective-c nsstring nsmutablestring

Objective-C中NSString和NSMutable String之间的实际区别是什么? 我已经搜索了很多但没有得到任何答案..我明白NSString是Immutable对象而NSMutableString是Mutable对象但是我想通过一个例子来理解它们之间的区别..请帮助我..

现在问题已经解决了..

3 个答案:

答案 0 :(得分:14)

不可变的字符串.....

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对象是不可变的,但这并不能阻止您更改指向字符串的变量的值。

答案 1 :(得分:1)

NSMutableString和NSString之间的区别:

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

NSString :如果您愿意的话,它是一次创建一次只读字符串;你会发现它的所有“操作”方法(substring,uppercaseString等)返回其他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对象。

答案 2 :(得分:-1)

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

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

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

 NSString *string1 = @"immutable String";

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

分配一个可变的字符串对象:

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

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