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:
    ,等等)。在本例中,您不仅要更新变量,还要更新字符串本身

  • 就我个人而言,我会使用方法1,每次都创建一个新的NSString。这样,我就不必费心处理突变,只需创建一个具有我想要的精确值的字符串。

    两个选项:

  • 每次使用
    [[NSString alloc]initWithFormat:@“which”]
    创建一个新字符串,并将其分配给变量。(确保遵循,其中包括确保释放字符串的上一个值。当然,无论如何解决此问题,都需要遵循这些规则。)

  • 创建一个字符串并使用变异方法更新该字符串(
    appendFormat:
    setString:
    deleteCharactersRange:
    ,等等)。在本例中,您不仅要更新变量,还要更新字符串本身

  • 就我个人而言,我会使用方法1,每次都创建一个新的NSString。这样,我就不必处理变异,只需创建一个具有我想要的精确值的字符串。

    有一个可以在初始化后修改的字符串。您可以使用
    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。