Dies ist die Deklaration meines UCRootViewControllers, der diese subviewclockControllers verwalten soll. Er wird später auch ihr Delegierter werden, wenn ein Controller angezeigt werden soll oder nicht.
Der rootViewController wird im UIAppDelegate stark gehalten und bleibt die ganze Zeit aktiv.
Also ist es richtig, diese Sub-ViewControllers schwach zu machen? Ich bin mir nicht 100% sicher, aber soweit ich verstehe, werden schwache Pointer deallociert, wenn kein starker Pointer auf sie zeigt. So wie die Wurzel stark ist, ist es richtig, sie schwach zu machen, oder?
%Vor% Dies ist die Kopfzeile eines meiner Sub-ViewControllers. Sie haben einen schwachen Zeiger auf den (späteren) Delegaten rootviewController. Reicht es aus, @class UCRootviewController
zu deklarieren, damit sie die Delegate-Methoden aufrufen? Brauche ich das überhaupt?
Danke
EDIT: Ich habe gerade einen schönen Artikel über ViewControllers und die Passage
gelesenVerwenden Sie immer hochwertige View-Controller-Container oder + [UIViewController presentModalViewController: animiert:] um View-Controller in Ihrer Anwendung anzuzeigen. Wenn Sie eine Referenz aufbewahren müssen zu einem View-Controller irgendwo, verwenden Sie eine schwache Referenz, außer wenn Sie Ich möchte wirklich, dass es länger für Caching-Zwecke am Leben bleibt. In solch In Fällen sollten Sie darauf achten, dass die Speicherbedingungen niedrig sind.
Es sagt, verwenden Sie eine schwache Referenz, was sind Ihre Meinungen dazu?
Der starke Zeiger bindet nur an Ihren rootViewController. Dies bedeutet nicht, dass es automatisch auf Ihre anderen viewControllers in Ihrem rootViewController verweisen wird.
Sie sollten diese Eigenschaften auf "strong" setzen, um sicherzustellen, dass Ihre anderen viewControllers auf keine Weise freigegeben werden, die Sie nicht möchten.
Wenn Sie sie in einen Navigationsstapel schieben, ist das in Ordnung, weil der Navigationsstapel automatisch auf diese zeigt. Aber wenn Sie nur ihre Ansichten als Subviews in Ihrem rootViewController hinzufügen, dann sollten Sie sicherstellen, dass diese Eigenschaften stark sind.
Objekte werden freigegeben, wenn kein starker Zeiger auf sie vorhanden ist. Und da es keine starken Zeiger auf Ihre anderen viewControllers gibt, werden sie freigegeben.
Strong ist das Äquivalent von Retain, außer dass ARC das Release für Sie verwaltet. Schwach ist es, Retain-Zyklen zu vermeiden - wo das Elternteil das Kind behält und umgekehrt.
__ weak gibt eine Referenz an, die das referenzierte Objekt nicht am Leben erhält. Eine schwache Referenz wird auf Null gesetzt, wenn keine starken Referenzen auf das Objekt vorhanden sind.
Hier ist ein Link: Schwache und starke Eigenschaft Setter Attribute in Ziel-C
Wenn Sie diese View-Controller beibehalten möchten, ist die beste Option eine starke Referenz! Stellen Sie sicher, dass sie nicht freigegeben werden, bevor Sie sie brauchen!
Tags und Links ios cocoa-touch uiviewcontroller properties delegates