2014年のご時世になっても,やはりprintfデバッグはそのお手軽さとあいまってよく使われる.
Objective-Cでの開発でもそれは御多分に洩れずそんな感じで,NSLog
を埋め込んで変数の様子をコンソールに出力する.
viewのheightなどを表示したいとき,
CGFloat height = CGRectGetHeight(view.frame); NSLog(@"height = %f", height);
なんてNSLog
を書く.
しかし,iOSの世界にもiPhone 5s が登場し,64bit環境が追加されてから,これが通用しなくなった.
(OS XはSnow Leopardから64bit環境になってるからもうちょっと前からだけど)
なぜなら,
CGFloat The basic type for all floating-point values. typedef float CGFloat; // 32-bit typedef double CGFloat; // 64-bit
そう,動作環境によってCGFloat
やNSInteger
の精度が変わるので,フォーマットの書式を使いわけないと警告が出たり思わぬバグを仕込んでしまったりする.
イチイチ使い分けるのもめんどうなので最近はこういう風に書いてる.
CGFloat height = CGRectGetHeight(view.frame); NSLog(@"height = %@", @(height));
ただNSNumber
リテラルを使ってるだけだけど,スカラの型がなんだろうが使える.
フォーマットなんだったっけ?ってイチイチGoogle先生にお伺いをたてる必要もなくなるので地味に便利.
余談
当然だけど,キャストの変わりにも使える.
NSInteger foo = ... NSUInteger bar = ... NSInteger baz = @(foo).integerValue + @(bar).integerValue;