Objective-C はじめました
なんか良くわからないけど、iPadのアプリを作らなきゃいけないかもしれないと思ったので。
まず手始めにデバッグできなきゃ話にならないので、そのへんのことやってみた。
iOS のアプリでは NSLog っていう関数があるらしい。そいつでデバッグログを出力する。んで、Objective-C は C の仕様を継承しているらしいので、ifdef なんかでデバッグビルドとリリースビルドでログ出力を制御したりするといい感じ。
デバッグ時だけログを出力させたい - 日々是笑心
このへんを参考にした。
NSLog はこんな感じで使う。
NSLog(@"unko"); NSLog(@"%d", 100);
んで、いざこんなふうにNSStringを渡してみると、ランタイムエラーで落ちる。
なんでじゃー!!!
NSString *str = @"unko";
NSLog(str);
この時点でポインタとかよくしらないボクは、きっとお作法的な何かだろうなと思ったりしてた。
ネット上のエロい人達のナレッジを拝借すると、みんなこんな感じに書いてるみたいだ。
NSString *str = @"unko"; NSLog(@"%@", str);
なるほど、sprintf っぽい書き方しなきゃだめなのね。
・・・でもまてよ、@"%@" は文字列でしょ?リテラルと変数ってなんか違うのん?
んー・・・。その文字列を変数に格納してみる。
NSString *fmt = @"%@"; NSString *str = @"unko"; NSLog(fmt, str);
とおったー!
でもなんで?w
ちょっと書いてみる
NSString *str = @"unko"; NSLog(str, @"");
これが通る。えー・・・
NSString *str = @"unko";
NSLog(str, nil);
そして、これも通る。えー・・・・・・・。
どうやら、第一引数がリテラルじゃない場合は、フォーマットを探しちゃうらしい。んで、なんでもいいからとりあえず第二引数をとると、なんか通る。なんだかなー。ちょっと気持ち悪い。