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

时间:2011-09-01 18:58:09

标签: objective-c ios

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

4 个答案:

答案 0 :(得分:10)

我预计MutableString在内存方面会稍微提高效率,因为你早就指出程序可能需要动态内存。 NSString可能会被分配一个适当大小的内存块。

使用NSString及其stringBy...方法,您将创建新对象,释放旧对象(如果需要)并使新对象自动释放。 (如果您从非自动释放更改为自动释放,请注意,您可以在dealloc中释放不再需要的版本)

答案 1 :(得分:3)

使用NSMutableString时,您无需分配和启动以下内容:

  1. 附加一些字符串或格式
  2. 删除或替换字符串
  3. 中的字符
  4. 插入或替换字符串
  5. 我认为在这种情况下,只有在使用realloc()

    的情况下free() + alloc() + init之外,才会重新分配内存(NSString

答案 2 :(得分:2)

使用NSString,您只需创建新实例 - 这意味着为新对象实例分配内存并丢失旧实例 - 当您将字符串追加到现有NSString时会发生这种情况。 NSString只应该用于不会改变其值的对象。

另一方面,使用NSMutableString只使用一个对象实例 - 它只是改变它所拥有的字符串数据。更有效的记忆和更快。

答案 3 :(得分:2)

当您需要字符串作为固定(不可变)字符串值,并使用NSString 作为可编辑(可变)字符串容器时,应使用NSMutableString缓冲液)

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

为什么我更喜欢NSString

NSString的价值永远不会改变。这意味着无论你做什么,你都可以确定NSString永远都是永恒的。因此,您可以信任一次验证的字符串值,而无需任何额外的检查这大大降低了程序的复杂性并大大降低了成本。

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

你可以认为你知道会改变什么。但对于大型程序或其他人的代码,很难确定。仅仅使用NSString就可以简化这一过程,因此您可以减少需要担心的事情。

NSString如何更有效率虽然每次更改字符串时都需要分配新对象?

对于整体程序,实际上您并不总是更改字符串。实际上,许多字符串值不需要更改。你可以分配或复制字符串。复制NSMutableString时,它会进行精确复制,这需要CPU资源,内存访问和内存空间。 NSString不需要实际的复制操作,因为它没有被复制。这是可能的,因为它保证不会被更改(不可变),所以它只是重新使用它自己。几乎没有任何费用。

你应该有相对较小的代码部分需要大量的字符串编辑。在那里使用NSMutableString。因为NSString无法更改,所以当您需要一些新的字符串值时,它需要创建一个新对象。这是低效的,几乎是NSString唯一的低效点。

NSMutableString的唯一优点是它支持就地编辑。换句话说,当您想要创建新的字符串值时,它不需要创建新对象。因此,如果您需要进行许多更改,可以节省对象制作成本。

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

对于所有NS~/NSMutable~类,这都是相同的。