当前位置:  开发笔记 > IOS > 正文

在这种情况下,NSMutableString是否比NSString更有效?

如何解决《在这种情况下,NSMutableString是否比NSString更有效?》经验,为你挑选了2个好方法。

如果我以这种方式声明一个指针变量:

NSString *foo;

然后在我的代码中的某个地方执行以下操作:

foo = @"bar";

这最终是我的NSString,在内存中创建一个带有附加字符串的新副本,然后删除我的初始字符串?作为NSMutableString,foo会更好吗?



1> Barry Wark..:

不,foo是变量持有一个指针NSString.赋值foo = @"bar"将指针存储的值设置foo为NSString的地址@"bar".没有副本.如果foo已经指向了另一个不是字符串constsant的NSString实例(例如),并且没有对该实例的其他引用,那么就会出现内存泄漏.你会@"bar"

[foo release];
foo = @"bar";

在这种情况下.您不需要保留或释放字符串常量@"bar".

字符串常量不能变异,因此如果尝试修改常量字符串的值,则会出现运行时错误.分配@"bar"NSString*vs 之间没有区别NSMutableString*.当然,NSMutableString仅仅因为您将@"bar"(NSString实例)的地址分配给类型的变量,您将无法使用没有运行时错误的变异方法NSMutableString*.如果你想改变字符串,你会这样做

NSMutableString *mutableFoo = [@"bar" mutableCopy];

在这种情况下,显然会制作副本,并且您负责mutableFoo在完成后发布.



2> Brad Larson..:

不.您的示例中的@"bar"是一个字符串常量,应该在您的代码中加入.您不需要担心使用此常量进行内存分配/释放.

当您对字符串进行大量的小操作(附加子字符串等)并且您不希望在整个地方继续分配自动释放的NSStrings时,NSMutableString的使用效率更高.由于循环中的内存问题,我倾向于避免iPhone上自动释放的字符串.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有