Protokolle und Delegierte für Dummies

8

Ich habe versucht, das herauszufinden, ich verspreche es! Es gibt eine Fülle von Informationen da draußen und ich bin immer noch in einem Meer von abstrakten Konzepten überschwemmt! Es ist wie wenn ich ein Kind war und niemand mir erklären konnte, warum ein Land nicht einfach mehr Geld drucken und wirklich reich sein könnte. Ich bin mit den meisten Sachen nicht so zurückgeblieben, aber aus irgendeinem Grund kann ich mich nicht mit diesem Konzept herumschlagen, also würde ich es sehr schätzen, wenn jemand es als herablassend "mit einem 4-jährigen sprechen" langsam wie möglich buchstabieren könnte !

Ich denke, Zielhandlung macht für mich einen Sinn. Es ist eine nützliche Methode, um eine Ansicht mit einem Controller zu kommunizieren, ohne viel tun zu müssen. Soweit ich das feststellen kann, hängt ein Controller-Objekt effektiv einen Listener an das View-Objekt an, so dass, wenn ein bestimmtes Ereignis in dieser View auftritt (dh die Taste gedrückt wird), die Controller-Methode ausgelöst wird. Das mag nicht technisch korrekt sein, aber als abstrakte Erklärung macht es Sinn für mich.

Also ist die Reihenfolge:

  1. Eine Zielmethode wird im Controller-Objekt erstellt.
  2. Eine Ansicht ist ausgewählt und mit dieser Methode grafisch verbunden.
  3. In dieser Ansicht tritt ein Ereignis auf, das die Methode vom Controller auslöst.

Protokolle und Delegierte haben mich verwirrt. Ich weiß, dass es etwas damit zu tun hat, Objekten zu erlauben, miteinander zu reden, aber ich habe versucht, mein (mangelndes) Verständnis so weit unten zu schreiben und es einfach gelöscht, weil ich denke, dass es am besten ist, die Knoten in meinem derzeitigen Denken nicht zu trennen wische die Tafel ab und beginne neu. Wenn jemand etwas Zeit damit verbringen könnte, den Zweck von

zu erklären
  1. Verwendung von Delegaten / Protokollen im Gegensatz zu target / action
  2. Die Bestandteile des Codes und wo er lebt
  3. Die Reihenfolge der Ereignisse, die bei der Verwendung des Prozesses auftreten

Ich wäre ewig dankbar.

Nach einigen Kommentaren zu anderen Erklärungen zu urteilen, bin ich nicht der Einzige, der ein bisschen verloren gegangen ist. Hoffentlich wird das von allgemeinem Nutzen sein. Vielen Dank!

Bearbeiten:

Okay, ich dachte, wenn ich mein Verständnis aufbilde, könnten die Leute mich korrigieren und das könnte es leichter machen.

Meine Probe wird aus dem Apple Docs , mit einem Fenster als Ansichtsobjekt und WindowDelegate als Delegat, wo ein Klick auf die Schaltfläche zum Schließen des Fensters eine" Sollte ich schließen? " Nachricht an den Delegierten.

Bestandteile des Kodex: Fenster (Ansicht) WindowDelegate (Controller anzeigen?)

  1. Deklarieren Sie das Protokoll, das ein Delegat im Schnittstellenbereich des Fensters (Ansicht) verwenden kann.
  2. Erstellen Sie eine Instanz des Delegaten im Fenster.
  3. Geben Sie an, dass das WindowDelegate das Windows-Protokoll implementiert, indem es Folgendes einfügt: in seine Schnittstelle. (bisschen wackelig hier?)
  4. Schreiben Sie die notwendige Umsetzung der Methoden in der WindowDelegate (View Controller) Implementierung Abschnitt.
  5. Auf ein bestimmtes Ereignis wird das Fenster eine Nachricht an den WindowDelegate mit bestimmten Informationen.
  6. Die WindowDelegate werden diese verarbeiten und eine Antwort zurück.

überall entlang geraden Linien?

    
Alan 06.01.2012, 13:39
quelle

4 Antworten

3

Hier ist eine ganze Menge Zeug und es klingt, als hättest du ein paar Dinge verwirrt.

Zunächst schlage ich vor, dass Sie auf die Apple-Entwickler-Website gehen und die Lernziel-C: A-Fibel- und Objective-C-Programmiersprache-Bücher herunterladen. Ignorieren Sie die Verkabelung der Target / Action-Schnittstelle für den Moment, weil es so klingt, als müssten Sie einige Grundlagen von Objective C verstehen. Hier erfahren Sie alles über Protokolle, usw. und andere objektorientierte Dinge.

Zweitens gibt es eine Reihe sehr guter Bücher, die Sie Schritt für Schritt durch die Entwicklung einer Anwendung führen. Beginn iPhone 4 Entwicklung: Exploring the iOS SDK ist eine, die gut angesehen wird. Dort erfahren Sie auch über die Delegierten.

Drittens verbringen Sie etwas mehr Zeit in der Dokumentation. Die SDK-Dokumentation enthält viele Artikel, in denen beschrieben wird, wie die Dinge von einer sehr grundlegenden Ebene funktionieren, und auf der Apple-Entwickler-Website gibt es auch viele.

    
drekka 06.01.2012 14:10
quelle
2

Es gibt Delegaten, die Ihnen helfen, Unterklassen zu vermeiden.

Subclassing ist etwas, das Sie immer vermeiden sollten, da es eine sehr enge Form der Kopplung ist. Kopplung ist, wenn zwei Objekte voneinander abhängig sind, um ordnungsgemäß zu funktionieren, und je mehr Kopplung Sie haben, desto schwieriger ist es, Änderungen an Ihrem Programm vorzunehmen (denn wenn Sie ein Objekt ändern müssen, werden Sie gezwungen, Änderungen an anderen vorzunehmen Objekte, die davon abhängen).

Der Grund dafür ist eine Form der Kopplung, denn wenn Sie von einer Oberklasse ableiten, hängt Ihre Unterklasse von den Methoden der Oberklasse ab (die die Unterklasse geerbt hat). Wenn Sie die Superklasse ändern müssen, müssen Sie möglicherweise alle Unterklassen damit ändern.

Nehmen wir an, Sie möchten eine Menge Objekte haben, die genau gleich sind, außer was sie mit einer Methode machen. Bei der Unterklassenbildung müssten Sie eine Reihe verschiedener Unterklassen erstellen und diese eine Methode für alle Klassen überschreiben, was eine Menge Unterklassen (und unerwünschte Kopplung) wäre. Hier kommen die Delegierten ins Spiel. Anstatt einige Unterklassen zu bilden, können Sie einfach die eine Klasse erstellen und sie so gestalten, dass sie ein Objekt der anonymen Typ-ID besitzt, das das Delegiertenobjekt ist (wir nennen es Kind) ). Dieses untergeordnete Objekt verfügt über die einzige eindeutige Methode, die zuvor im übergeordneten Objekt enthalten war. Jetzt löst das übergeordnete Objekt die Methode für das untergeordnete Objekt aus.

Anstatt mehrere Unterklassen zu bilden, erstellen wir also eine Reihe von Instanzen der gleichen Klasse und geben jedem ein anderes Delegiertenobjekt, was wir tun können, da die Typ-ID nicht angibt, um welchen Typ von Objekt es sich handelt benutzen. Jedes verschiedene Delegate-Objekt implementiert diese Methode anders, und wir vermeiden Subclassing.

    
user3251270 19.06.2014 22:55
quelle
0

Um Delegierte zu verstehen, sehen Sie sich die von Cocoa bereitgestellten Delegaten an. Zum Beispiel hat NSWindow eine Delegate-Methode namens   - (void) windowWillClose: (NSNotification *) aNotification Wenn Sie diese Delegate-Methode implementieren, sehen Sie in der Benachrichtigung nach, welches Fenster geschlossen werden soll, und führen eine Bereinigung für dieses Fenster durch. Sie sind ein Delegat für das NSWindow-Objekt in dem Sinne, dass Sie einige Arbeit für das Fensterobjekt ausführen.

Alle Cocoa-Delegiertenmethoden haben Namen, die Wörter wie "did", "will", "sollte" usw. enthalten. Sie geben Ihrem Code die Fähigkeit, zusätzlich zu den normalen Dingen, die er erledigen würde, besondere Dinge zu tun diese Objekte selbst - daher sind Sie ein Delegierter für diese Objekte.

    
Jim Merkel 12.01.2012 01:45
quelle
-1

Für Delegierte können Sie sich diese Frage ansehen .

Für Protokolle sollten Sie diese Frage oder sehen Sie sich die Dokumentation an.

>

Hoffe, das hilft!

    
pmk 06.01.2012 14:04
quelle