Ich laufe immer wieder in Situationen mit UIViewControllern, die eine große Menge an IBOutlets enthalten, die den Controller mit den Unteransichten seiner Ansicht verbinden (normalerweise UILabels).Wirklich bewährte Methode, IBOutlet-Ansichtselemente beizubehalten?
Nach "Best Practices", das heißt auf allen UI-Elemente behalten: @property (retain, nonatomic) UILabel *theElement1
, @property (retain, nonatomic) UILabel *theElement2
, ... gibt mir wahnsinnige Mengen von Kesselblech Code in dealloc
und viewDidUnload
für den View-Controller.
Die angreifenden IBOutlets werden niemals außerhalb des UIViewControllers verwendet oder gesetzt (die set-Methode wird nur in viewDidUnload verwendet und wenn die nib geladen wird) außer automatisch, wenn die nib geladen wird.
Das Ergebnis von "best practice" ist:
dealloc
mit[theElement1 release]
übersät,[theElement2 release]
usw.viewDidUnload
mit[self setTheElement1:nil]
,[self setTheElement2:nil]
usw.
Da jedoch alle diese Elemente sind bekannt, dass durch die Ansicht sowieso beibehalten werden, und die Ansicht wird von der UIViewController zu geeigneten Zeiten freigegeben, ich sehe absolut keinen Grund überhaupt für mich, dies manuell zu verwalten.
Der Grund für diese besondere "Best Practice" (soweit ich das beurteilen kann) besteht darin, dass Sie mit Ihren Daten übereinstimmen. Aber sobald Sie beginnen, eine große Anzahl von Steckdosen zu haben, werden Sie eher die Steckdose irgendwo in einer der beiden Methoden zu behandeln, als Sie Probleme haben, die Steckdosen richtig zu ändern, um für die speziellen Steckdosen zu behalten, die Sie wirklich wollen zu behalten, auch nach der Ansicht ist auf Wiedersehen.
Gibt es einen Grund für diese "best practice", außer der, die ich kenne, oder sollte ich mich ganz frei fühlen, diese "Regel" im speziellen Fall von Subviews auf die Sicht eines UIViewControllers zu brechen?
Ich mag das Thema dieser Frage. "Wirklich" – VoodooChild