2012-01-06 12 views
8

私は約束してこれを理解しようとしました!これについての豊富な情報があり、私はまだ抽象概念の海に溢れています!私が子供の頃のように、なぜ国がもっとお金を印刷して本当に豊かにできないのかを私に説明することはできませんでした。私はこのようなことのほとんどが遅れているわけではありませんが、何らかの理由で私はこのコンセプトの周りを頭で覆うことができませんので、誰かが「4歳に話す」ことを躊躇せずに!ダミーのためのプロトコルと代理人

私はtarget-actionが完全にわかります。それは、たくさんのことをすることなく、ビューがコントローラと話すことを可能にするのに便利な方法です。私が作る限りでは、コントローラオブジェクトは、ビューオブジェクトに事実上リスナを付けるので、特定のイベントがそのビューで発生した場合(ボタンが押された場合)、コントローラメソッドが起動されるようになります。これは技術的に正確ではないかもしれませんが、抽象的な説明として私には意味があります。

だから配列は:

  1. ターゲットメソッドがコントローラオブジェクトに作成されています。
  2. ビューが選択され、グラフィカルにそのメソッドに接続されています。
  3. コントローラからメソッドを起動するビューでイベントが発生します。

プロトコルと代議員は私に不快感を与えます。私はそれがオブジェクトがお互いに話すことを許可することと関係があることを知っていますが、私は以下のように理解していませんでしたが、今のところ考えていませんでした。スレートを拭き取り、新たに始める。アクションに/コードの

  • 成分をターゲットにするとは対照的に誰もが親切に代表団/プロトコルを使用して

    1. の目的を説明する少し時間を過ごすことができ、それが発生したイベントの
    2. シーケンスを住んでいる場合プロセスが使用されているとき

    私は永遠に感謝します。

    他の説明のコメントから判断すると、私は少し失われた唯一の人ではないと感じています。うまくいけば、これは一般的な使用になります。本当にありがとう!

    編集:私はちょうど私の理解の人々が私を修正することができ、そしてそれは、これがより簡単になるかもしれないレイアウトならば、私は多分思ったよう

    わかりました。

    サンプルはApple Docsから取得され、ビューオブジェクトとしてウィンドウがあり、デリゲートとしてWindowDelegateがあり、クローズウィンドウボタンをクリックすると「閉じるべきですか?」というメッセージが表示されます。デリゲートへのメッセージ。コードの

    成分: ウィンドウ(ビュー) WindowDelegate(ビューコントローラ?)

    1. デリゲートは、ウィンドウ(ビュー)のインタフェース部で使用できるプロトコルを宣言します。
    2. デリゲートのインスタンスをウィンドウで作成します。
    3. WindowDelegateがウィンドウプロトコルを実装していることを記述するには、そのインターフェイスに。 (ここで少し揺れる?)
    4. メソッドの必要な実装をWindowDelegate(View Controller)実装セクションに記述します。
    5. 特定のイベントで、Windowは特定の情報を持つWindowDelegateにメッセージを送信します。
    6. WindowDelegateはこれを処理して答えを返します。

    右の線に沿ってどこですか?

  • +2

    関連:http://stackoverflow.com/questions/6148148/delegates-what-are-they-really/6148838#6148838 – justin

    答えて

    -1

    代表者の場合は、this questionをご覧ください。

    this questionをチェックするか、documentationを調べるとよいでしょう。

    希望すると便利です。

    +0

    ありがとう、私はまだ私が見たことがないいくつかの事に私につながったしかし苦しんでいる。 – Alan

    3

    ここにはたくさんのものがあり、混乱しているものがいくつかあるようです。

    まず、Appleの開発者サイトに行き、「Learning Objective-C:Primer and Objective-C Programming Language」の書籍をダウンロードすることをお勧めします。あなたがObjective Cの基本を理解する必要があるように思えるので、ターゲット/アクションインタフェースの配線を無視してください。これは、プロトコルやその他のオブジェクト指向のものについてすべてを知る場所です。

    第2に、非常に優れた書籍が数多くあり、アプリケーションの開発を順を追って説明します。 iPhone 4の開発を開始する:iOS SDKを検討することは、よく評価されています。これはまた、代議員について知る場所です。

    第3に、ドキュメントにもう少し時間を費やしてください。 SDKのドキュメントには、非常に基本的なレベルからの動作の概要や、Apple Developerサイトにはたくさんの記事が掲載されています。

    +0

    +1「学習目標-C:プライマー」。私はObjective-Cを初めて学んだときにこの文書が本当に助けになったことを覚えています! – v1Axvw

    +0

    ありがとう、私は現時点でスタンフォード講義を通して自分の道を進んでいます、私はそれらが私が持っている本よりも有益であることがわかります。現時点で5番目にあり、Objective-Cの基本を合理的に把握していれば、私が苦労しているxCodeのアプリケーションが増えています。私は上記のターゲットアクションリファレンスは無関係に見えるかもしれないが、基本的に講師はコントローラとビューが通信するための2つのメソッドとしてターゲットアクションとプロトコル/デリゲートを記述した。 – Alan

    +0

    ある程度それらは似ています。ターゲット/アクションは、XcodeとObjective Cに固有のものです。これは基本的に、アプリケーションに関するメタデータと呼ばれるものを提供するためです。コンパイルするときに、XCodeはこの情報を使って物事を結びつけるので、手動でコードを書く必要がありません。デリゲートパターンは言語に依存しません。たとえば、Javaアプリケーションで使用できます。だから、デリゲートパターンのコンセプトを理解することで、ターゲット/アクションの仕組みを理解することで、Objective Cアプリケーションをより具体的に手助けできるようになります。 – drekka

    0

    デリゲートを理解するには、Cocoaが提供するデリゲートをご覧ください。 NSWindowには、 という代理メソッドがあります。 - (void)windowWillClose:(NSNotification *)aNotification デリゲートメソッドを実装する場合は、通知を見て、どのウィンドウが閉じようとしているかを判断し、 。 NSWindowオブジェクトの代理人であるという意味では、ウィンドウオブジェクトに対していくつかの作業をしています。

    すべてのCocoaデリゲートメソッドには、「did」、「will」、「should」などの単語が含まれています。これらのメソッドは、実行する通常のことに加えて特別な処理を行う機能をコードに与えます。これらのオブジェクト自体によって - したがって、あなたはそれらのオブジェクトの代理人です。

    2

    サブクラス化を避けるために、代理人が存在します。

    サブクラス化は、カップリングの非常にタイトな形式なので、常に避けるべきです。カップリングとは、2つのオブジェクトが適切に動作するように依存する場合であり、カップリングが多いほど、プログラムを変更するのが難しくなります(1つのオブジェクトを変更しなければならないと、それに依存するオブジェクト)。

    サブクラス化の理由は、スーパークラスからサブクラス化すると、サブクラスがスーパークラスのメソッド(サブクラスが継承したもの)に依存するためです。したがって、スーパークラスを変更する必要がある場合は、そのサブクラスをすべて変更する必要があります。

    あなたは1つの方法で何をするかを除いて、まったく同じオブジェクトの束を持ちたいとします。サブクラス化することで、さまざまなサブクラスを作成し、すべてのサブクラスを上書きする必要があります。これはサブクラス化(および不要な結合)が多いためです。これは、デリゲートが入ってくる場所です。複数のクラスをサブクラス化するのではなく、単純に1つのクラスを作成して、それをデリゲートオブジェクトとなる匿名型のオブジェクトのオブジェクトを所有するように設計することができます)。この子オブジェクトは、以前は親にあった単一の一意のメソッドを持ちますが、親は子オブジェクトのメソッドをトリガーします。

    複数のクラスをサブクラス化するのではなく、同じクラスのインスタンスを多数作成し、それぞれに異なるデリゲートオブジェクトを与えます。これは、タイプIDがオブジェクトの型を指定していないためです使用する。それぞれの異なるデリゲートオブジェクトは、そのメソッドを別々に実装し、サブクラス化は行いません。

    関連する問題