Objective-Cのデザインパターン

クラスクラスタ

あるスーパークラスから派生したサブクラスが多数存在する場合、それぞれのサブクラスをダイレクトに利用しようとするとクラスの数が膨大になり利用しにくい。そこでサブクラスを非公開とし、サブクラスへのアクセスは公開されたスーパークラスへのアクセスによって実現する。これがクラスクラスタである。サブクラスはスーパークラスより生成されるが非公開であるため、外からはスーパークラスのインスタンスとして見える。

クラスクラスタに属するサブクラス

クラスクラスタは簡明さと拡張性のトレードオフである。拡張を必要とする場合はサブクラスを別途作成する必要がある。サブクラスを定義する際は以下のように作成する。

  • イニシャライザを全てオーバライドする
  • プリミティブメソッド(最低限実装しなければならないメソッド)をオーバライドする

他の派生メソッドはオーバライドしなくても使用することができるが、挙動を変更する場合はオーバライドして実装する。

ファクトリメソッド

ファクトリーメソッドとはクラスメソッド、つまりインスタンス化することなく使用することのできるメソッドである。

アウトレット

(ViewControllerなどの)オブジェクトのプロパティ(パーツ)のうち、(Storyboardなど)ほかのオブジェクトを参照するもの。Storyboadを読み込む際に接続が確立しなおされる。メモリ管理の観点より、他の設定項目と同様にクラスに含めるべき項目なのかどうか検討が必要である。

@propety(weak, nonatmic) IBOutlet UILabel *label;

オブジェクトの割り当てと初期化

オブジェクトは、alloc()メソッドにより仮想メモリ領域からオブジェクトを格納するために必要なメモリ量の割り当てを受け、このあとinit()メソッドによりインスタンス変数を初期化する。シングルトンインスタンスの場合、新たなインスタンスの生成を要求されても、既存のインスタンスを返すような初期化処理を実装しておく必要がある。返り値がnilの場合、初期化に失敗したことを示す。