iphone - 在这种情况下 NSMutableString 比 NSString 更有效吗?

标签 iphone objective-c cocoa-touch

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

NSString *foo;

然后在我的代码稍后的某个地方做一些事情,例如:

foo = @"bar";

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

最佳答案

不,foo是一个变量,持有一个指向 NSString 的指针。作业foo = @"bar"设置指针 foo 存储的值到 NSString @"bar" 的地址。没有复制。如果foo已经指向另一个 NSString例如,不是字符串常量(即像 @"bar" )并且没有对该实例的其他引用,那么就会出现内存泄漏。你会

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

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

字符串常量无法更改,因此如果尝试修改常量字符串的值,将会出现运行时错误。分配 @"bar" 之间没有区别到NSString*NSMutableString*相比。当然,您将无法使用NSMutableString的变异方法。没有运行时错误,只是因为您将@“bar”(一个 NSString 实例)的地址分配给 NSMutableString* 类型的变量。如果你想改变字符串,你会这样做

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

在这种情况下,显然已制作了副本,您有责任释放 mutableFoo当你完成它时。

关于iphone - 在这种情况下 NSMutableString 比 NSString 更有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706519/

相关文章:

iphone - dispatch_async 没有被调用

ios - Brightcove 库不断使应用程序崩溃

iphone - 将工具栏添加到 UITableViewController

objective-c - 当 UIScrollview 作为 subview 存在时,UIWebview scrollsToTop 不起作用

iphone - 确定 iPhone 的大致位置

iphone - 初始化后如何填充UITableView

ios - 从 UITableView 中删除一行后,它仍然显示

ios - 迁移,但仍然在 'RLMException' 上崩溃,原因 : 'Migration is required

iphone - subview 淡入淡出帮助

iphone - 使用点语法作为 getter 是错误的吗?