web-dev-qa-db-ja.com

Objective-C(iPhone)で文字列を連結する方法は?

可能性のある複製:
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]]]; 
}

おそらくお分かりのように、私はかなり混乱しています。 pls plsは私を助けます:(

21
r0ach

これを試して:

NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
    [theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;
36
Tom Dalling

ループを使用しているので、トムとベンジーの両方のソリューションに注意してください。それらはそれぞれ、反復ごとに追加の自動解放オブジェクトを作成します。小さなループの場合は問題ありませんが、ループのサイズに制限がない場合、または文字列が大きい場合、メモリスパイクが非常に大きくなり、パフォーマンスが低下する可能性があります。特にiPhoneでは、これはまさに、短期間のメモリスパイクが原因で予期しないメモリの問題を引き起こす可能性がある種類のループです。

次のソリューションは、メモリフットプリントが小さくなっています(また、わずかに高速で入力が少なくなります)。 -appendFormat:ではなく-appendStringへの呼び出しに注意してください。これにより、破棄される2番目の文字列の作成が回避されます。最後の文字列の末尾には、削除したい余分なスペースがあることに注意してください。最初または最後の反復を別の方法で処理するか、ループ後の最後のスペースをトリミングすることで、これを修正できます。

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

[NSArray componentsJoinedByString:]をお忘れなく。この場合、NSArrayはありませんが、一般的なケースでは、これはおそらく、探しているものを取得するための最良の方法です。

17
Rob Napier
//NSArray *chunks   
string = [chunks componentsJoinedByString: @","];
7
Kit

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:@", "];
}
4
Benjie