Ric*_*son 1 cocoa-touch objective-c nsstring nsmutablestring
我需要在整个程序中使用一堆字符串变量.我经常重新分配其中一些,而其他人在执行期间仍然使用相同的值.这里的最佳做法是什么?
在第一种情况下,变量应该是,NSMutableString并且我应该将它们转换为NSString(使用复制方法),只要它们需要是需要NSString对象的函数的参数.是对的吗?
当我将它们重新分配给其他常量值时,我不应该丢弃以前的内容,对吧?
对于NSString对象,如果我需要为它们分配一个新值,我想我应该释放它们,再次分配它们,然后分配新值.那是对的吗?
除非您实际修改字符串,否则不应使用NSMutableString.您将整个字符串重新分配给新值,因此请保持常规NSString.使用自动释放的版本,因为这将比alloc/init/release更有效.如果您知道它们将被分配给它们,您也可以将字符串重新分配给常量.
在第一种情况下,变量应该是NSMutableString,并且我应该将它们转换为NSString(使用复制方法),只要它们需要是需要NSString对象的函数的参数.是对的吗?
好吧,你可以这样做,但效率会非常低.记住继承 - 一个NSMutableString 是一个NSString,只是添加了一些新的东西.一个简单的演员可以做到这一点:
NSString *string = (NSString *)aMutableString;
Run Code Online (Sandbox Code Playgroud)
更好的是,你甚至不必这样做.由于继承,您可以直接在需要常规字符串的地方传入可变字符串,不需要强制转换.这就是继承之美.
当我将它们重新分配给其他常量值时,我不应该丢弃以前的内容,对吧
对于可变或不可变的字符串.旧的值只是在内存中被覆盖 - 没有什么可以处理掉.就内存管理而言,从字面上创建新字符串实际上并不高效.只需重新分配它们.你将永远不需要alloc/ init一个字符串多次,并且单个init应该由一个单独平衡release.
附录:你什么时候应该使用Mutable?
在物理上更改现有字符串的值时,应使用可变字符串,而不完全丢弃旧值.示例可能包括在开头或结尾添加字符,或在中间更改字符.使用可变字符串,您可以"就地"执行此操作 - 您只需修改现有字符串即可.相比之下,一旦设置了值,不可变字符串就不能改变该值.NSString有一些方法,例如stringByAppendingString:,它确实将一个字符串添加到现有的字符串,但它返回一个新的字符串.在幕后,NSString将旧字符串复制到新的(更大的)内存位置,添加参数,并返回新字符串.复制的效率要低得多(相对而言,或者你必须做很多事情).
当然,没有什么可以阻止你将一个字符串物理地分配给另一个字符串.旧值将被覆盖.大多数NSStrings,包括@"String Constants",都是自动释放的.如果要创建新字符串并且决定分配/ init,则可以将其分配给另一个值而不会产生任何后果:
myString = anotherString;
myString = myTextField.text;
Run Code Online (Sandbox Code Playgroud)
您可以使用可变字符串和不可变字符串执行此操作.主要的一点是,在更改字符串本身时,您应该只使用mutable.但是您可以使用可变字符串和不可变字符串来更改变量,而无需编译器或运行时问题(缺少内存管理,但大多数都是自动释放的).
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |