Frage

Dies ist vor allem eine stilistische Frage, aber ich habe neugierig gewesen, was andere Gedanken sind, da ich die Programmierung für das iPhone gestartet. Wenn Sie eine UIView in Ihrer iPhone-Anwendung haben, und Sie müssen es in Ihrer Anwendung an anderer Stelle zugreifen (in der Regel in einer anderen Funktion in einem View-Controller), tun Sie die Ansicht mit einer ganzen Zahl markieren und mit der viewWithTag: Nachricht abrufen will, oder Sie setzen es in der Regel auf eine Eigenschaft im view-Controller für den einfachen Zugriff später?

Speicher als eine Eigenschaft offensichtlich macht es leichter, später zurückzuholen, aber ich würde denken, dass eine (vielleicht vernachlässigbar) Menge an Speichern, anstatt durch Tagging eine Ansicht gespeichert wird als Objekteigenschaft zu setzen.

habe ich in der Regel bereits die Schaffung Eigenschaften auf meinen Ansicht-Controller, vor allem, weil ich faul bin und Ansichten mit viewWithTag: Abrufen ist ärgerlich.

War es hilfreich?

Lösung

Es gibt keine Speicher, indem keine Eigenschaften gespeichert werden soll - eine Eigenschaft, nur ein kleines Stück Code zu erzeugen, die Ihrer Ansicht nach auf eine Instanz Variable Zeige bezieht, das wird beibehalten werden, wenn Sie darauf zeigen oder nicht.

Mit viewWithTag immer teurer und langsamer wäre, weil dieser Anruf durch die Ansichtshierarchie gehen sieht jeder zu fragen, was der Tag-Wert ist.

ich immer IBOutlet Instanzvariablen verwenden, und fügen Sie Tags zu Kontrollen manchmal, wo ich muss nichts tun, außer was bestimmte Steuer sagen einen Delegaten-Methode aufgerufen, die von ein paar verschiedene Steuerelemente aktiviert werden konnte. Es ist ein wenig weniger effizient, aber der Code ist einfacher in diesem Fall zu erhalten.

Andere Tipps

I Eigenschaften verwenden. Der Speicher Auswirkung ist bei weitem nicht sein ein Problem zu denken. viewWithTag: kann auch ein wenig CPU brennen zu verwenden, aber der Hauptgrund, warum ich es tun, ist der Reiniger-Code, der zur Folge hat. Es ist viel schöner für den Zugriff auf self.leftSideView als [self.view viewWithTag: LEFTSIDEVIEW]., Und Sie haben nicht eine Aufzählung zu schaffen, zu wissen, was los ist

Ich betrachte Tags wie zum Debuggen nützlich, aber nicht von Tag zu Tag nutzen.

Ich erkennen, dass dies auf die Frage des OP tangential sein könnte, aber dies kann in der Fütterung Google hilfreich sein.

Eine Anwendung, die ich für UIView Tagging gefunden habe, ist eigentlich nicht einen Blick durch den Tag in der Ansichtshierarchie zu finden (die, wie oben Bezug genommen wird, können ziemlich teuer werden), sondern auf diskriminiert zwei oder mehr Ansichten voneinander durch einen Delegierten, die eine Tonne von Eigenschaftszuweisungen zu vermeiden.

(die UIViewController Code fester gekoppelt machen kann sicherlich) als eine Möglichkeit, mehrere von ihnen zu handhaben, zugewiesen wird

Ein klassischer Fall dafür ist ein UITableViewController deren UITableViewDataSource Delegierten hat eine separate Klasse externalisiert worden. Sagen Sie die UITableViewController später eine Suchleiste wollen hinzugefügt, und wollen die gleiche UITableViewDataSource nutzen. Was das bedeutet, ist, dass UITableViewDataSource Methoden genannt werden, und die Datenquelle muß häufig die reale UITableView vom searchResultsTableView auf dem UISearchDisplayController diskriminiert. Wenn die UITableViewController einen Tag auf jedem der Tabellenansichten gesetzt, dann könnte die Datenquelle leicht Verzweigungsverhalten auf dem Tag-Wert basiert und ohne Referenzen der Tabellenansichten oder (schlimmer) die Suche Display-Controller zu benötigen.

Noch einmal, ich weiß, das ist nicht gerade der Baum war, die die Fragesteller bellen, aber es ist der einzige Anwendungsfall finde ich mich über die Verwendung von Tags wirklich gutes Gefühl.

ich immer binden sie mit Interface Builder ivars IBOutlet

Just wiederholen, was Kendall sagte, viewWithTag: ist teuer. Ich hatte eine Schleife von einigen hundert Anrufe zu ihm und der Schleife würde 2+ Sekunden auszuführen nehmen. Switched zu einem Array und jetzt merke ich, nicht einmal die Schleife läuft.

Ich bin zu dieser Diskussion zu spät, aber ich denke, es lohnt sich Justin Searls' Punkt über die Verwendung von Tags zu erstrecken sich zwischen den Ansichten zu unterscheiden, insbesondere Kontrollen. Manchmal müssen Sie eine Gruppe von Schaltflächen, die alles tun, im Wesentlichen das Gleiche, aber unterschiedliche Werte darstellen. Die Tasten auf einem Rechner sind ein gutes Beispiel: alle Tasten oder zumindest all numerisch diejenigen, werden auf das gleiche Ziel und Aktion verbunden werden. Obwohl das Ziel einen Auslass für jede Taste haben könnte und die Aktion könnte die Adresse des Absenders an jeden Ausgang wiederum vergleichen, ist es viel einfacher, jeder Taste eine Kennung zu geben, der die Aktion discern hilft, die Taste gedrückt wurde. Dies ist, wo Tags am nützlichsten sind.

Wenn ein View-Controller einen Verweis auf eine Ansicht, um sie konfigurieren müssen oder auf andere Weise Nachrichten an sie senden, macht es in der Regel sinnvoll, einen Ausgang zu verwenden. Wenn es nur einen Weg, muss einen Blick von einem anderen sagen, Tags ist eine gute Wahl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top