什么时候应该使用NSString和NSMutableString?

我想什么时候应该使用NSString ,什么时候应该使用NSMutableString ,因为我们可以在NSString中附加string,那么在Objective C编程中NSMutableString的有效使用是什么呢?

我期望MutableString在内存方面稍微有效一些,因为你很早就指出程序可能需要dynamic内存。 NSString可能会被分配一个适当大小的内存块。

有了NSString和它的stringBy...方法,你正在创build新的对象,释放旧的(如果需要的话),并使新的对象自动释放。 (注意,如果你正在从非autorelease更改autorelease,你可能有一个释放你的dealloc不再需要了)

当使用NSMutableString你可以不用分配和初始化如下:

  1. 附加一些string或格式
  2. 删除或replacestring中的字符
  3. 插入或replacestring

我认为在这种情况下,除了free() + alloc() + init之外,只有在使用NSString内存才会被重新分配( realloc()

使用NSString,你只能创build新的实例 – 这意味着为新的对象实例分配内存,并丢失旧的实例 – 这是当你将string附加到现有的NSString下面会发生什么。 NSString你应该只用于不会改变它们的值的对象。

另一方面,使用NSMutableString只能处理一个对象实例 – 它只是改变它所保存的string数据。 更有效的记忆更明智和更快。

当你需要一个string作为一个固定的(不可变的)string值 ,而NSMutableString 作为一个可编辑的(可变的)string容器(缓冲区)时,你应该使用NSString

如果你不确定,主要使用NSString 。 在大多数情况下,它会提供更好的整体性能。

我为什么要selectNSString

NSString的值永远不会改变。 这意味着你可以确定一旦NSString将永远是无论你做什么。 所以你可以信任一次validation的string值,而不需要额外的检查。 这大大降低了程序的复杂性和检查成本。

NSMutableString没有这种保证。 一旦你将NSMutableString传入某个函数或方法,现在你无法知道它的当前值。 现在您需要再次执行validation或检查。

你可以认为你知道什么将被改变或不。 但是对于大的程序或其他人的代码,很难确定。 只需要使用NSString就可以简化这个过程,所以你将不需要担心什么。

如何NSString是更有效的,但它需要分配新的对象,每次我改变string?

对于总体程序,实际上你总是不改变string。 实际上,很多string值都不需要改变。 您的分配或复制string就像更多。 当你复制一个NSMutableString它使得精确的复制,这需要CPU资源,内存访问,内存空间。 NSString不需要实际的复制操作,因为它不被复制。 这是可能的,因为它是保证不被改变(不可变的),所以它只是重新使用自己。 几乎没有任何成本。

而且你应该有相当小的一部分代码需要大量的string编辑。 在那里使用NSMutableString 。 因为NSString不能被改变,所以当你需要一些新的string值的时候需要创build一个新的对象。 这是低效的,几乎是NSString的唯一低效点。

NSMutableString的唯一优点是它支持就地编辑。 换句话说,当你想创build新的string值时,不需要创build新的对象。 所以如果你需要做很多的改变,你可以节省成本。

cocoa被devise来利用这种可变性分离。 您会发现您需要声明@property (copy)而不是@property (strong)以确保该对象不会受到程序其他位置的任何更改的影响。 NSString在这里非常高效,不像NSMutableString需要每次都被复制。

这对所有的NS~/NSMutable~类都是一样的。