什么时候应该使用NSString和NSMutableString?
我想什么时候应该使用NSString
,什么时候应该使用NSMutableString
,因为我们可以在NSString中附加string,那么在Objective C编程中NSMutableString
的有效使用是什么呢?
我期望MutableString在内存方面稍微有效一些,因为你很早就指出程序可能需要dynamic内存。 NSString可能会被分配一个适当大小的内存块。
有了NSString和它的stringBy...
方法,你正在创build新的对象,释放旧的(如果需要的话),并使新的对象自动释放。 (注意,如果你正在从非autorelease更改autorelease,你可能有一个释放你的dealloc不再需要了)
当使用NSMutableString
你可以不用分配和初始化如下:
- 附加一些string或格式
- 删除或replacestring中的字符
- 插入或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~
类都是一样的。