22

可能重复:
如何在 Objective-C 中连接字符串?

首先,平台是 iPhone,label.text 改变了显示的标签。考虑这种情况:

我有一个整数数组。我想在屏幕上显示它。

这是我的看法:

-(IBAction) updateText: (id)sender {
   int a[2];
   a[0]=1;
   a[1]=2;
   a[2]=3;
   for (int i=0; i<=10;i++)
     label.text = [NSString stringByAppendingString: [NSString stringWithFormat: @"%i", a[i]]]; 
}

正如你可能看到的,我很困惑。请帮助我:(

4

4 回答 4

36

试试这个:

NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
    [theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;
于 2009-07-21T12:25:03.753 回答
17

由于您使用的是循环,因此请谨慎对待 Tom 和 Benjie 的解决方案。他们每个人都会在每次迭代中创建一个额外的自动释放对象。对于一个小循环,这很好,但是如果循环的大小是无限的或者如果字符串很大,这可能会导致非常大的内存峰值和性能损失。尤其是在 iPhone 上,这正是由于短暂的内存峰值而导致令人惊讶的内存问题的那种循环。

以下解决方案具有较小的内存占用(它也稍微快一些并且需要更少的输入)。注意调用-appendFormat:而不是-appendString。这避免了创建将被丢弃的第二个字符串。请记住,最后一个字符串的末尾有一个额外的空间,您可能想去掉它。您可以通过不同地处理第一次或最后一次迭代,或者通过修剪循环后的最后一个空格来解决这个问题。

NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
    [theString appendFormat:@"%i ",i];
}
label.text = theString;

别忘了[NSArray componentsJoinedByString:]。在这种情况下,您没有 NSArray,但在您使用的常见情况下,这可能是获得所需内容的最佳方式。

于 2009-07-21T14:00:18.230 回答
7
//NSArray *chunks   
string = [chunks componentsJoinedByString: @","];
于 2010-07-28T13:17:57.580 回答
4

另一种不使用 NSMutableString 的方法:

NSString* theString = @"";
for (int i=0; i<=10;i++){
    theString = [theString stringByAppendingFormat:@"%i ",i];
}
label.text = theString;

这是一个完整的实现(更正你的范围):

-(IBAction) updateText: (id)sender {
     int a[3];
     a[0]=1;
     a[1]=2;
     a[2]=3;
     NSString *str = @"";
     for (int i=0; i<3;i++)
       str = [str stringByAppendingFormat:@"%i ",i];
     label.text = str;
}

你也可以这样做(例如,如果你想要一个逗号分隔的列表):

-(IBAction) updateText: (id)sender {
     int a[3];
     a[0]=1;
     a[1]=2;
     a[2]=3;
     NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
     for (int i=0; i<3;i++)
         [arr addObject:[NSString stringWithFormat:@"%i",i]];

     label.text = [arr componentsJoinedByString:@", "];
}
于 2009-07-21T13:45:07.797 回答