Objective c 在Obj-C中,如何使用新的格式化字符串更新现有NSString变量?
如何使用新的格式化字符串更新现有的Objective c 在Obj-C中,如何使用新的格式化字符串更新现有NSString变量?,objective-c,nsstring,Objective C,Nsstring,如何使用新的格式化字符串更新现有的NSString变量 例如,我有这样一个变量: String1 = [NSString new]; 我希望使用标准printf格式使用新的格式化内容不时更新此字符串对象 我可以使用initWithFormat:消息初始化一个新的NSString,但这对已经实例化的对象不可用 有什么想法吗?我想我可以每次销毁NSString并重新初始化一个新的,但这是每次需要更新它时的正确解决方案吗?Cocoa中的字符串是不可变的对象 这意味着您不会更改相同的字符串,但只需释放
NSString
变量
例如,我有这样一个变量:
String1 = [NSString new];
我希望使用标准printf
格式使用新的格式化内容不时更新此字符串对象
我可以使用initWithFormat:
消息初始化一个新的NSString,但这对已经实例化的对象不可用
有什么想法吗?我想我可以每次销毁NSString并重新初始化一个新的,但这是每次需要更新它时的正确解决方案吗?Cocoa中的字符串是不可变的对象
这意味着您不会更改相同的字符串,但只需释放旧字符串,并使用更新的内容分配一个新的NString
当然这不是问题,因为您将有一个NSString*
引用,它将指向最后更新的字符串
NSString myString = [NSString stringWithFormat:...];
// do whatever
myString = [NSString stringWithFormat:..]
Cocoa中的字符串是不可变的对象
这意味着您不会更改相同的字符串,但只需释放旧字符串,并使用更新的内容分配一个新的NString
当然这不是问题,因为您将有一个NSString*
引用,它将指向最后更新的字符串
NSString myString = [NSString stringWithFormat:...];
// do whatever
myString = [NSString stringWithFormat:..]
两种选择:
[[NSString alloc]initWithFormat:@“which”]
创建一个新字符串,并将其分配给变量。(确保遵循,其中包括确保释放字符串的上一个值。当然,无论如何解决此问题,都需要遵循这些规则。)appendFormat:
,setString:
,deleteCharactersRange:
,等等)。在本例中,您不仅要更新变量,还要更新字符串本身[[NSString alloc]initWithFormat:@“which”]
创建一个新字符串,并将其分配给变量。(确保遵循,其中包括确保释放字符串的上一个值。当然,无论如何解决此问题,都需要遵循这些规则。)appendFormat:
,setString:
,deleteCharactersRange:
,等等)。在本例中,您不仅要更新变量,还要更新字符串本身appendStringWithFormat:
添加格式化字符串。但是,如果要替换整个字符串,只需创建另一个。它不需要花费太多的时间和资源
这取决于口味,但我反对重复使用Jack建议的变量。这常常让我感到困惑,每当我创建一个新字符串时,我更喜欢创建一个新的变量名,如
NSString* myString = [NSString stringWithFormat:...];
// do whatever
NSString*myString2 = [NSString stringWithFormat:...];
另一件事是,new
在Objective-C世界中没有广泛使用。如果你使用它,因为它听起来很熟悉C++背景等,请考虑使用< > > [[类OLC]……]…< />代码>。 < P> >初始化后可以修改。您可以使用appendStringWithFormat:
添加格式化字符串。但是,如果要替换整个字符串,只需创建另一个。它不需要花费太多的时间和资源
这取决于口味,但我反对重复使用Jack建议的变量。这常常让我感到困惑,每当我创建一个新字符串时,我更喜欢创建一个新的变量名,如
NSString* myString = [NSString stringWithFormat:...];
// do whatever
NSString*myString2 = [NSString stringWithFormat:...];
另一件事是,
new
在Objective-C世界中没有广泛使用。如果你使用它,因为它听起来很熟悉C++背景等等,考虑使用<代码> [[类OLC]……]…<代码> > .< /P> < P>最简单的做法就是总是使用“工厂”方法来给你一个自动还原的不可变对象。事实上,只要创建一个包含一些静态文本的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的不可变字符串。您不需要担心释放或分配它们 最简单的方法就是始终使用“工厂”方法,为您提供一个自动释放的不可变对象。事实上,只要创建一个包含一些静态文本的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的不可变字符串。您不需要担心释放或分配它们 您是否需要在这些字符串使用类方法时向其添加
autorelease
?Gary,在这种情况下,答案是否定的,因为stringWithFormat返回一个自动删除的NSString。您是否需要在这些字符串使用类方法时向其添加autorelease
,在这种情况下,答案是否定的,因为stringWithFormat返回一个自动删除的NSString。