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