iPhoneアプリ開発の勉強(9日目)
やったとこ。Chapter4のLESSON15、LESSON16。
ここでは写真の表示とセピアに加工して保存することをやった。
写真をセピアにするところのコードは少しややこしいけど、それ以外のところはとてもシンプルで分かりやすかった。
セピアにするところはこの本の性質からしてすると?と思ったけど、まぁわかりやすい変化を見せるために入れたのかなとも思った。
- UIImageWriteToSavedPhotosAlbum関数が同期的に写真を保存してくれずにselector指定して完了時の処理を書くようになっているのは、ブロッキングしてユーザーに待たせないための工夫になっていてなるほどなぁと思った。
やったとこ。「04-05クラスオブジェクト」から「05-02手動カウンタ管理方式」まで。
クラスメソッド
- クラスメソッドの定義は頭に(+)。
- NSObjectにあるclassメソッドでクラスオブジェクトを取得することが出来る。(型はClass)
- クラス名はハードコーディングしたくない状況の時は下みたいな感じでクラスメソッドを呼び出すことが可能。
[[obj class] classMethod]
- クラス変数はないのでstaticをつけた変数で定義する。その場合継承はされないのでサブクラスで使いたい場合は、アクセサを用意する。
- クラスオブジェクトの初期化はinitializeメソッドで呼び出される。勝手に呼び出されるので明示的に書いちゃダメ。また、複数回呼ばれてもおかしくならないようにコードを書いておく必要がある。(初期化フラグを用意するとか)
- initializeはid型で返すべし。
メモリ管理
- Lion、iOS5以降では新しく追加されたARCという方式を使用することが推奨されている。その場合でもリファンレンスカウンタ方式の仕組みは知っておいたほうがいい。
- allocで確保して、retailで参照カウンタをインクリメント、releaseでデクリメント。
- そのオブジェクトが持っている変数の開放は、deallocで行う。
- NSAutoreleasePoolに任せる方法もある。
- コンビニエンスコンストラクタはautoreleaseした状態で作成される。
この辺りのロジック以外の部分に気を使う必要があるというのは、やっぱり面倒なところではあるなと思った。