Ich habe gerade die folgende Erklärung aus einem Forum gefunden:
"Delegierte sind die Vergangenheit. Blöcke sind die Zukunft."
1) Blockiert der bevorzugte Weg Delegationsaufgaben über Delegierte zu erledigen?
2) Gibt es einen besonderen Vorteil, einen Delegaten gegen einen Block zu verwenden?
Ich denke, es gibt ein kleines Missverständnis darüber, was die Delegierten machen und welche Blöcke das tun.
In Objective-C gibt es drei Möglichkeiten, Rückrufe zu behandeln:
Delegation - & gt; Wenn Sie ein Objekt zum Delegaten eines anderen Objekts machen, müssen Sie angeben, welche Arten von Ereignissen vom übergeordneten Objekt generiert werden, auf das das Delegatobjekt reagiert.
Zielaktion - & gt; Dies ist typisch für UI-Interaktionen, bei denen eine UI-Unteransicht (Schaltfläche, Schieberegler usw.) basierend auf einer Benutzereingabe (z. B. Berührung / Tippen) ein Ereignis generiert, das von einem vordefinierten Ereignishandler (in der Regel eine Objective-C-Methode) verarbeitet wird spezifiziert).
Benachrichtigung - & gt; Ein Objekt registriert sich selbst mit einer Instanz von NSNotificationCenter
, um auf Ereignisse eines beliebigen Typs zu "hören" und reagiert auf eines oder mehrere dieser Ereignisse.
Ein Block ist an sich keine Möglichkeit, Delegierungen oder andere Callbacks zu verarbeiten.
Sie sind eigenständige Codeteile, die Zugriff auf die lokalen Variablen und Parameter der aufrufenden Methode haben. Sie können verwendet werden, um Verhalten in einer Reihe von verschiedenen Kontexten zu definieren. Der Hauptvorteil eines Blocks (wie ich es sehe) ist, dass er Code vereinfachen kann, indem überflüssige, übermäßig spezifische Methoden eliminiert werden, die Ihre Codebasis überladen würden. Blöcke helfen dabei, Code dort zu lokalisieren, wo er am sinnvollsten ist: genau dort im Callback-Mechanismus.
Im Grunde verbessert die Verwendung dieser Funktionen die Lesbarkeit und macht den Code wartungsfreundlicher.
Ob diese Vorteile Blöcke zu der "bevorzugten" Methode machen, Callbacks zu bearbeiten, ist definitiv eine Frage der persönlichen Meinung und Erfahrung. ;)
Tags und Links objective-c objective-c-blocks delegates