Objective-C 中 NSString 和 NSMutable String 之间的实际区别是什么?我进行了很多搜索,但没有得到任何答案..我知道 NSString 是不可变对象,而 NSMutableString 是可变对象,但我想借助示例了解它们之间的区别..请帮助我..
现在问题已经解决了..
Objective-C 中 NSString 和 NSMutable String 之间的实际区别是什么?我进行了很多搜索,但没有得到任何答案..我知道 NSString 是不可变对象,而 NSMutableString 是可变对象,但我想借助示例了解它们之间的区别..请帮助我..
现在问题已经解决了..
不可变字符串.....
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
,但这并不能阻止您更改指向字符串的变量的值。
NSMutableString 和 NSString 的区别:
NSMutableString : NSMutableString 对象提供了修改它们所代表的底层字符数组的方法,而 NSString 没有。NSMutableString 公开了appendString、deleteCharactersInRange、insertString、replaceOccurencesWithString等方法。所有这些方法都对存在于内存中的字符串进行操作。
NSString :如果你愿意,它是一个创建一次然后只读的字符串;您会发现它的所有“操作”方法(子字符串、大写字符串等)都返回其他 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 对象孤立。
在 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)