質問: 今までなんとなく Objective-C の Delegate を使っていましたが、もっと理解を深めたいと考えています。 現在は「UITableView を使いたいから Delegate しないと」程度の認識です。 * Delegate の正確な意味合い * 設計上の位置付け はどういったものなのでしょうか。
回答: Objective-Cの「デリゲート(delegate)」は、プログラミング言語Objective-Cが提供する特定機能をさすのではなく、アプリケーション実装におけるデザインパターンの一種です。(一例として、Objective-Cとは異なり、C#ではdelegateという言語"機能"が存在します。) Objective-Cのデリゲートは単なるパターン(≒設計上の決まり事)ですから、ソフトウェア設計者間で共通認識を持つためにも、コーディングを行う上では一定のルール付けが必要とされます。以下、Apple公式ドキュメント「Objective-Cプログラミングの概念」からの抜粋です。(読みやすさのため本質でない部分は削りました) 22ページ: > > デリゲート(delegate, 委譲)とは、あるオブジェクトがプログラム中でイベントに遭遇したとき、それに代わって、または連携して処理するオブジェクトのことです。 > > [...] > > デリゲートの仕組み > > デリゲートの設計は単純です。委譲する側のクラス(デリゲートクラス)には、一般にdelegateという名前の、アウトレットまたはプロパティがあります。[...] > > > 24ページ: > > デリゲートメッセージの形式 > > デリゲートメソッドの名前のつけ方には規約があります。[...] > > > 28ページ: > > カスタムクラスにデリゲートを実装する手順は次の通りです。 > > * クラスのヘッダファイルに、デリゲートのアクセサメソッドを宣言する。[...] > > * アクセサメソッドを実装する。[...] > > * デリゲートに対するプロトコルを宣言する。[...] > > >