如何使用新的格式化字符串更新现有的NSString
变量?
例如我有一个这样的变量:
String1 = [NSString new];
我希望使用标准printf
格式使用新的格式化内容不时更新此字符串对象。
我可以使用initWithFormat:
消息初始化新的NSString,但这对于已经实例化的对象是不可用的。
有什么想法吗?我想我每次都可以销毁NSString并重新初始化一个新的NSString,但每次我需要更新它时这是正确的解决方案吗?
答案 0 :(得分:5)
两个选项:
每次使用[[NSString alloc] initWithFormat:@"whatever"]
创建一个新字符串,并将其分配给变量。 (确保你遵循memory management rules,其中包括确保释放字符串的先前值。当然,无论你如何解决这个问题,你都需要遵循这些规则。)
创建NSMutableString并使用变异方法(appendFormat:
,setString:
,deleteCharactersInRange:
等)更新字符串。在这种情况下,您不仅要更新变量,还要更新字符串本身。
就个人而言,我会使用方法1,每次都创建一个新的NSString。这样我就不必调整变异,只需创建一个具有我想要的精确值的字符串。
答案 1 :(得分:3)
Cocoa中的字符串是不可变的对象。
这意味着您不会更改相同的字符串,但您只需释放旧字符串并为新的NString
分配更新后的内容。
当然这不是问题,因为您将有NSString*
引用指向最后更新的字符串。
NSString myString = [NSString stringWithFormat:...];
// do whatever
myString = [NSString stringWithFormat:..]
答案 2 :(得分:0)
初始化后可以修改NSMutableString
。您可以使用appendStringWithFormat:
添加格式化字符串。但是如果你想要替换整个字符串,只需创建另一个字符串。它不会花费太多时间和资源。
这取决于品味,但我反对像Jack建议的那样重新使用变量。它常常让我困惑,我更喜欢在创建新字符串时创建一个新的变量名,如
NSString* myString = [NSString stringWithFormat:...];
// do whatever
NSString*myString2 = [NSString stringWithFormat:...];
另一件事是new
在Objective-C世界中没有被广泛使用。如果您使用它,因为它听起来很熟悉您的C ++背景等,请考虑使用[[Class alloc] initWith...]
代替。
答案 3 :(得分:0)
最简单的方法就是始终使用“工厂”方法为您提供自动释放的不可变对象。实际上,每当你创建一个包含一些静态文本的NSString时,你基本上都会这样做。
例如:
NSString *myString = @"myString";
myString = [NSString stringWithFormat:@"myStringWithFormat"]; // Update it to something else
myString = [NSString stringWithFormat:@"The current date is: %@", [NSDate now]]; // Update it again
以上所有三个示例都是不可变的字符串,其集合引用计数为0.您无需担心释放或分配它们。