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

r0a*_*ach 21 string iphone objective-c string-concatenation

可能重复:
如何在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]]]; 
}
Run Code Online (Sandbox Code Playgroud)

你可能已经看到了,我很困惑.请帮我解决:(

Tom*_*ing 36

试试这个:

NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
    [theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;
Run Code Online (Sandbox Code Playgroud)


Rob*_*ier 17

既然你正在使用循环,那么对Tom和Benjie的解决方案都要小心一点.它们每次迭代都会创建一个额外的自动释放对象.对于一个小循环,这很好,但如果循环的大小无限制或字符串很大,这可能会导致非常大的内存峰值和性能损失.特别是在iPhone上,这正是一种循环,由于短暂的内存峰值,可能导致令人惊讶的内存问题.

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

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

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


小智 7

//NSArray *chunks   
string = [chunks componentsJoinedByString: @","];
Run Code Online (Sandbox Code Playgroud)