重複の可能性:
データ ソースとデリゲートの違いは何ですか?
iPhone初心者です。デリゲートとデータ ソース メソッドとは何か、またそれらが何をするのかについて混乱しています。誰かが私に違いを説明できますか?
重複の可能性:
データ ソースとデリゲートの違いは何ですか?
iPhone初心者です。デリゲートとデータ ソース メソッドとは何か、またそれらが何をするのかについて混乱しています。誰かが私に違いを説明できますか?
Apple のObjective-C プログラミングドキュメントの概念から:
デリゲートデリゲートは、別のオブジェクトがプログラム内のイベントに遭遇したときに、そのオブジェクトの代わりに、または別のオブジェクトと連携して動作するオブジェクトです。委任オブジェクトは多くの場合、ユーザー イベントに応答するレスポンダー オブジェクト (つまり、AppKit の NSResponder または UIKit の UIResponder から継承するオブジェクト) です。デリゲートは、そのイベントのユーザー インターフェイスの制御を委任されたオブジェクト、または少なくともアプリケーション固有の方法でイベントを解釈するように求められるオブジェクトです。
委任の価値をよりよく理解するには、テキスト フィールド ( NSTextField または UITextField のインスタンス) やテーブル ビュー ( NSTableView または UITableView のインスタンス) などの既製の Cocoa オブジェクトを考慮すると役立ちます。これらのオブジェクトは、一般的な方法で特定の役割を果たすように設計されています。たとえば、AppKit フレームワークのウィンドウ オブジェクトは、そのコントロールのマウス操作に応答し、物理ウィンドウのクローズ、サイズ変更、移動などを処理します。この制限された一般的な動作は、特に影響を受ける動作がアプリケーションに固有のものである場合に、イベントがアプリケーションの他の場所にどのように影響するか (または影響を与えるか) についてオブジェクトが認識できることを必然的に制限します。
委譲のプログラミング メカニズムにより、オブジェクトは、プログラムの他の場所で発生した変更 (通常はユーザー アクションによって引き起こされる変更) に合わせて外観と状態を調整することができます。さらに重要なことに、委任により、あるオブジェクトが別のオブジェクトの動作を継承する必要なく変更できるようになります。デリゲートはほとんどの場合カスタム オブジェクトの 1 つであり、定義上、ジェネリック オブジェクトとデリゲート オブジェクトが自分自身を認識できないアプリケーション固有のロジックが組み込まれています。
データ ソース
データ ソースはデリゲートに似ていますが、ユーザー インターフェイスの制御を委任されるのではなく、データの制御を委任される点が異なります。データ ソースは、テーブル ビューやアウトライン ビューなどの NSView および UIView オブジェクトによって保持されるアウトレットであり、表示されるデータの行を入力するためのソースを必要とします。ビューのデータ ソースは通常、そのデリゲートとして機能するオブジェクトと同じですが、任意のオブジェクトにすることができます。デリゲートと同様に、データ ソースは非公式プロトコルの 1 つ以上のメソッドを実装して、必要なデータをビューに提供し、より高度な実装では、ユーザーがそのようなビューで直接編集するデータを処理する必要があります。
デリゲートと同様に、データ ソースは、データを要求するオブジェクトからメッセージを受信するために存在する必要があるオブジェクトです。それらを使用するアプリケーションは、それらの永続性を確保し、必要に応じてメモリ管理されたコードに保持する必要があります。
データ ソースは、ユーザー インターフェイス オブジェクトに渡すオブジェクトの永続化を担当します。つまり、これらのオブジェクトのメモリ管理を担当します。ただし、アウトライン・ビューや表ビューなどのビュー・オブジェクトがデータ・ソースからのデータにアクセスするときはいつでも、データを使用している限りオブジェクトを保持します。しかし、それは非常に長い間データを使用しません。通常、データを表示するのに十分な時間だけデータを保持します。