如何在Objective-C(iPhone)中连接字符串?

How to Concatenate String in Objective-C (iPhone)?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I concatenate strings in Objective-C?

首先,平台是iphone和label.text更改显示的标签。考虑这种情况:

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

这是我的看法:

1
2
3
4
5
6
7
8
-(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]]];
}

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


试试这个:

1
2
3
4
5
NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
    [theString appendString:[NSString stringWithFormat:@"%i",i]];
}
label.text = theString;


因为你做的是使用一个循环,两个汤姆和benjie小心点的解决方案。他们每个autoreleased创建额外的对象,通过迭代。一个小循环,那很好,但如果是无界的大小环或如果字符串是大,这可以导致a超大内存和性能的扣球命中。特别在iPhone,这是一个小回路完全可以导致记忆问题的好友挤住记忆,由于短的穗状花序。

下面的解决方案有一个较小的内存占用(它是更快和更准确的测试时间少)。注意在调用-appendFormat:-appendString而去。这避免了需要的第二字符串将走了。记住,这是最终的字符串有额外的空间,最后,你可能想摆脱。你可以是任何固定或由第一迭代处理负载或负载在不同的空间,trimming后环。

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

不要忘记[NSArray componentsJoinedByString:]。在这个案例nsarray你不有,但在普通的情况下,你会做,这是最好的方式得到你要找的。


1
2
//NSArray *chunks  
string = [chunks componentsJoinedByString: @","];

另一种方法:使用nsmutablestring

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

这是一个实现(校正的全范围):

1
2
3
4
5
6
7
8
9
10
-(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;
}

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

1
2
3
4
5
6
7
8
9
10
11
-(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:@","];
}