2009-07-07 3 views
1

Um nur einen Hintergrund für meine Situation zu geben, habe ich einen Manager Singleton, der Daten von einem Webserver bezieht und Zugriff auf die heruntergeladenen Daten bietet. Ich habe mehrere Arten von Ansichten, die diese Daten konsumieren, aber nur eine Ansicht zu jeder Zeit muss Ereignisse empfangen.Best Practices für Singletons und Benachrichtigungen auf dem iPhone

Ich habe mich gerade gefragt, was Leute bevorzugen, wenn sie Ereignisse von einem Singleton erhalten müssen. Verwenden Sie NSNotificationCenter, Target/Action oder Delegate?

Danke für jede Hilfe.

Antwort

4

Sind Sie wirklich, wirklich sicher, dass nur eine Ansicht Ereignisse empfangen muss? Zum Beispiel haben Sie keine Master-Ansicht, die Zugriff auf das gleiche Update benötigen würde, über das eine Teilansicht benachrichtigt wurde?

Wenn Sie wirklich nur einen View-Controller benötigen, der zu einem bestimmten Zeitpunkt Updates benötigt, kann ich einen Delegate-Ansatz verwenden. Hier ist etwas zu beachten - was passiert, wenn Sie in der Mitte ein Update erhalten und der Benutzer Bildschirme ändern ... ist das OK? Würden Sie die Anfrage stornieren?

Alles andere, oder wenn das sich während des Fluges ändernde Delegatenszenario Probleme hat, dann ist es vielleicht besser, eine Benachrichtigung zu erhalten, an die sich jeder wenden kann. Es ist am besten, die Benachrichtigung mit irgendeiner Art von Hinweis auf die Änderung zu belassen und den Empfänger die geänderten Daten nachschlagen zu lassen.

+0

Danke, ich habe nicht einmal darüber nachgedacht, was passieren würde, wenn sie während des Anrufs die Bildschirme wechseln würden. Danke auch an Mark für seine Antwort. – Meroon

3

Wenn es eine große Anzahl von Ereignissen gibt, möchten Sie sich von NSNotifications fernhalten.

Für den geringsten Aufwand würde ich mit dem Delegiertenmuster gehen, obwohl ich denke, dass Ziel/Aktion nicht viel mehr Aufwand als Delegierten hat.

Versuchen Sie Ihren Lieblingsweg und wenn es ein Problemprofil gibt oder versuchen Sie einen anderen Ansatz.

Ich beginne normalerweise mit dem am einfachsten zu implementieren. Zum Beispiel habe ich einmal versucht, Benachrichtigungen für einen Interface-Code zu verwenden, den ich vor Jahren geschrieben hatte, aber mit 30 bis 60 Updates/Sekunde war die gesamte Schnittstelle inakzeptabel, also ging ich mit Delegierten, die das Problem behoben haben.