schwache oder starke Eigenschaften für meine Sub-ViewControllers?

8
%Vor%

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

gelesen
  

Verwenden 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?

    
MJB 07.05.2012, 19:47
quelle

2 Antworten

9

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.

    
Johannes Lumpe 07.05.2012, 19:53
quelle
2

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!

    
wayway 07.05.2012 19:55
quelle