クラスクラスタ
複数の非公開具象クラスをまとめた公開抽象クラス。例を挙げるとNSNumberクラス。内部には、整数や浮動小数毎に実装されたクラスを用意しているが、インタフェーストして公開しているのは数値に対応したNSNumberクラス。
クラスクラスタの欠点を挙げるとすれば、公開抽象クラスのサブクラスを定義することが困難。
クラスファクトリメソッド
クラスファクトリメソッドの名前は、「+ (type)className...」となる。例を挙げると、例えば、NSDateクラスの場合は以下の通り。
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;
ARCが広く使われるようになった現状では、allocとinitの二つのメソッドを呼ばないといけないので楽という利点しか感じられなくなったが、このメソッドの呼び出し側はオブジェクトを所有しない。つまり、autoreleaseされたインスタンスを返すという意味のメソッドだ。
デリゲートとデータソース
デリゲート(委譲)は、サブクラスを作成しないで、あるオブジェクトの処理を外に出す実装方法。
データソースは、デリゲートと似ていて、デリゲートがインタフェースの制御を委譲するものだが、データソースはデータの制御を委譲するものだ。
イントロスペクション
イントロスペクションは、オブジェクトの内容を調べる機能のことで、例えば、あるクラスのサブクラスなのかだとか、あるメソッドを実装しているか、あるプロトコルに純処しているか等だ。
ちょっと、純粋なオブジェクト指向言語に反する部分があると思うのだが、実用主義らしい、これによって柔軟な実装ができる便利な機能だと思う。
オブジェクトの割り当て
他の純粋なオブジェクト指向言語と異なり、インスタンスの生成などが言語でなくフレームワークで定義されているというのが、Cocoaの面白いところだ。
オブジェクトの初期化
「オブジェクトの割り当て」と重複するが、C++でコンストラクタ(構築子)と呼ばれるものは、NSObjectの実装ルールとなっている。
Model-View-Controllerパターン
Lisa Toolkitから受け継がれているAppleのクラスライブラリで重要視しているデザインパターン。著者がCocoaを始めた時は、具体的にどうするのかがピンとこなかったが、現在では、対応するクラスがフレームワークで用意されているなどで、このデザインパターンに沿いやすくなったと思う。
オブジェクトモデリング
初期のCocoaではモデルに対応するクラスがなかったが、CocoaバインディングやCoreDataが出た頃から、モデルの実装をサポートする機能が充実してきた。
オブジェクトの可変性
MutableとMutableでないクラスが用意されていることだ。
アウトレット
Interface Builderで接続される、他のオブジェクトの参照。インスタンス変数のことだ。
Receptionistパターン
キー値監視(KVO)などを使った、あるイベントに対応した処理を呼び出すようなもののこと。
ターゲット-アクション機構
対象となるオブジェクトのメソッドを呼び出す仕組み。例を挙げるとInterface Builderでコントローラでイベントが発生すると、接続したインスタンスのメソッドを呼び出すことだ。
フレームワークの相互乗り入れについて
Core FoundationとFoundationで、相互にデータを利用出来る仕組みで、Toll-Free Bridgingと呼ばれている。
関連情報
Cocoa Advent Calendar 2015
Cocoa向け コーディングガイドライン
Objective-Cプログラミングの概念
【Cocoa練習帳】
http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)