如果我以这种方式声明一个指针变量:
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/