iPhone開発で最初に躓きがちな事
思いついたら随時更新していきます。 これも追加しろ!とか、間違ってるぞ!とかあったらコメントください。
ObjC周り
参照カウンタ
参照カウンタについて、呼び出し側が責任を持ってreleaseする必要があるのはinit系かcopy系を呼んだ時のみ。
これ以外は、呼び出され側(なんていうんだ?)が参照カウンタを持っている(か、例えばautoreleaseしてある)
リリースする前にBuild And Analyze
リリースする前に必ずBuild And Analyze(Shift+Cmd+A)をしよう。メモリリークやらなにやらを指摘してくれる。
NSNull vs nil
[NSDictionary dictionaryWithObejctsAndKeys]ではセンチネルとしてnilを使うが、nilを値として設定したい時もある。 その場合は代わりに印として[NSNull null]を使う。 nilの場合はNull Object Pattern的に、全てのセレクタ呼びだしは無視されるが、NSNullに何か呼びだすと例外が出るので注意。
STLが使いたい!!
hogehoge.mmとかにすればObjective-C++としてコンパイルしてくれるので、stlも使えるよ。
Interface Builder周り
File's Ownerを設定する
自作ViewControllerのxibを作って「あれれーロードされないぞ」って事になったら、File's OwnerがNSObjectのままになっていないかチェック
Subviewのpropertyはassignにする
subviewはviewが参照カウンタをもっているのでretainにする必要はない(retainにした場合、明示的にreleaseする事)
XCode周り
なんかミラクルおかしい!
オーガナイザーが糞重くなったり、ビルドしたけど謎のエラーで実行できなくなったりしたらとりあえずXCodeを再起動させてから考えると良いと思う。
リファレンスを見る
変数名などをOption+Clickするとヘルプが出てきます。
その他
UI周りの操作はMain Threadで行う。
UIに関する操作(例えばpushViewControllerとか)はmain threadで行うのが無難(詳しく追ってないので、経験上、としか言えないけど…)
別スレッドから操作したい時は、performSelectorOnMainThreadを呼べば楽。