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

问题描述:

目标C中NSString和NSMutable String之间的实际区别是什么? 我已经搜了很多,但没有得到任何答案..我明白,NSString是不可变对象和NSMutableString是可变的对象,但我想了解它们之间的区别与示例的帮助..请帮助我..在示例的帮助下,目标C中NSString和NSMutable String的实际区别是什么?

现在问题已经解决了。

+2

可能的[文档]重复(http:///developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableString_Class/Reference/Reference.html) – 2013-05-09 12:13:21

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

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时报告新值。

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

+0

对于不可变:为什么str2不会在str2 = str1之后变得不可变? 它是如何获得“Hello hehehe”的新价值? – Honey 2016-03-12 11:56:48

正如我们所知,String值是用双引号给出的java和其他语言。 例如“欢迎使用IOS教程”。

但是在目标c中,它是不同的字符串值,我们必须在引号前用“@”符号表示字符串值。示例如下。 NSLog(@“欢迎使用IOS教程”);

创建字符串对象 在Objective C中,有两种类型的字符串对象,其中一个是可变的和不可变的。 为了创建Immutable字符串,我们必须使用NSString并创建可变的,我们必须使用NSMutableString。如果我们使用NSString创建一个字符串对象,它被称为不可变字符串对象。这意味着此字符串只能分配一次,该字符串不能以任何方式进行修改。

NSString *string1 = @"immutable String"; 

对于可变字符串对象,我们使用NSMutableString类。 NSMutableString是NSString的一个子类。 分配一个可变字符串对象是不同的。 例如,

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

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

差异:

的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对象。

+0

@aniMotwani关心添加从粘贴位置的引用链接“NSMutableString和NSString之间的区别”部分。 – 2013-05-09 11:47:30