2つの方法
全部で2つってことではないですが、代表的なものとして以下があります。
A: stringWithFormatを利用する
NSInteger num = 100;
NSString *str = [NSString stringWithFormat:@"%ld",num];
これは入門書などにも多く書かれていて一般的です。
(Cっぽい)
B: NSNumerを利用
NSInteger num = 100;
NSString *str = @(num).stringValue;
こっちの方が割とわかりやすいかなって個人的には思います。
(Javaっぽい)
@(n)
この部分はリテラル表記を使っていて
[NSNumber numberWithInt:n]
と同じです。
したがって、NSNumberのstringValueメソッドでキャストすることができます。
検証
書く量が減るので B 一択だろと思ってましたが、
ふと本当にいいのか?パフォーマンス大丈夫なのか?と思ったので軽い検証をしました。
100
というログを10000回吐くまでの時間を計測しました。
計測はXcode 6から XCTest.framework
に追加されたメソッドを利用しました。
結果は以下のようになりました。
倍近くかかってます。
結果は面倒なので載せませんが、複数回行ったところ大体同様な結果が得られました。
Bが倍近くかかった原因としては
NSInteger -> NSString
ではなく NSInteger -> NSNumber -> NSString
と2回キャストを行っていることが挙げられます。
まとめ
- 数値からNSStringへのキャストには大きく2つある
- NSNumberを利用した方がいちいちフォーマットを書く必要がなくてなんとなく楽
- 単体で言えば差は 0.1595ms
個人的には基本はBを使って、パフォーマンスを意識したい部分、文字と組み合わせる部分ではAかなと思ってます。