cocoa 串问题

标签 cocoa memory-management nsstring

我有一个 NSString,我想将其值写入 NSMutableString。这是否有效:

NSString *temp = [NSString stringWithString:@"test"];
NSMutableString *mutable = temp;

我问这个问题是因为虽然这看起来可行,但我认为这会将 temp 和 mutable 分配给同一地址空间。当将值传递给方法或从方法返回值时,我经常遇到这个问题。有时我看到其他人这样做或使用 stringWithString 或 initWithString 创建可变字符串。谢谢

最佳答案

您可以使用 mutableCopy 方法,该方法创建接收器的可变副本并适用于采用 NSMutableCopying 的任何类。协议(protocol)(其中 NSString 是其中之一):

NSString *temp = [NSString stringWithString:@"test"];
NSMutableString *mutable = [temp mutableCopy];

这将创建字符串的可变副本,作为新的字符串实例。在这种情况下,它不适用,因为 temp 是一个自动释放的字符串,但如果您不再需要它,则需要释放您已复制的旧字符串。

由于 mutableCopy 包含“copy”,因此您需要对新字符串进行内存管理(根据 Apple Object Ownership Policy 获取它的所有权)。

您使用的方法只是将 mutable 分配为指向先前实例化的 NSString 的指针。

关于 cocoa 串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313836/

相关文章:

c - malloc() 成功但分配的内存少于预期

javascript - 如何获取 String 中的 Javascript 元素值? (iPhone)

iphone - NSString 删除字符串中的单引号

swift - 将网页 View 内容保存为 pdf 文件

cocoa - 防止 CGEventCreateKeyboardEvent 已按下修饰键

objective-c - 访问 cocoa 中另一个类中创建的对象

c - 在 C 中使用 char 数组填充结构

algorithm - 在 0 和 100 亿之间以随机顺序一次选择一个数字

ios - NSAttributedString 在 IOS 6.1 上崩溃

cocoa - 在 Carbon Objective C++ 应用程序中使用 Cocoa delegate