2014-02-17 5 views
5

Ich habe kürzlich hier und auf anderen Seiten viel darüber gelesen, ob IBOutlets stark oder schwach sein sollten. Das offizielle Urteil lautet, dass sie schwach sein sollten, außer wenn sie auf Xib-Objekte der obersten Ebene verweisen.IBOutlets stark oder schwach - Gibt es tatsächlich einen Unterschied zum Speichermanagement? (ARC)

Das ist in Ordnung.

Allerdings weiß ich noch nicht genau, warum die Einstellung auf "stark" oder "schwach" tatsächlich einen Unterschied in der Speicherverwaltung der App bewirken würde. Insbesondere scheint es seit iOS6, dass viewDidUnload beim Empfang einer Speicherwarnung nicht mehr aufgerufen wird, in diesem Sinne würde die Wahl von schwach oder stark für IBOutlets keinen Unterschied machen.

Habe ich recht, wenn ich denke, dass für View-Controller, die sich nicht mehr auf dem Navigations-Stack befinden (d. H. Nachdem sie geladen und dann gepoppt wurden), alle als schwach deklarierten IBOutlets freigegeben würden?

Danke für alle Einsichten!

+2

im Allgemeinen, halten Sie die weak' 'Stellen, wenn sie ein statisches 'haben superview' bereits (das hält die Ansicht am Leben, bis sie Teil der Ansicht Hierachie sind, und es wird nicht stark verursachen Zyklus beibehalten), und wenn eine Ansicht zu einer 'Ansicht' hinzugefügt/entfernt wird, ist es besser, die 'starke'Referenz sicherzustellen, dass die Ansicht am Leben gehalten wird, bis sie schließlich freigegeben werden soll. – holex

Antwort

1

IBOutlets können als schwach deklariert werden, da sie beim XIB-Parsing erstellt und zum UIView-Stack hinzugefügt werden. Sie benötigen also keine starke Referenz auf das Objekt.

Wenn Sie ein IBOutlet schwach deklarieren, stellen Sie sicher, dass jede Unteransicht ohne Speicherleck gelöscht wird, wenn die Hauptansicht von UIViewcontroller verschwindet.

+0

Das ist es, woran ich mich interessiere. Wenn Sie sie also auf "schwach" setzen, können Unteransichten gelöscht werden, sobald die besitzende Ansicht nicht mehr vorhanden ist. – GuybrushThreepwood

+0

ja, weil die einzige (starke) Referenz im Code auf seiner Superview ist. – IgnazioC

2

Sie haben vielleicht bemerkt, dass Sie beim Einfügen eines IBOutlet direkt aus dem Interface Builder auswählen können, ob es sich um eine schwache oder starke Eigenschaft handelt. Nach einer kleinen Suche in der Apple-Entwickler-Bibliothek habe ich festgestellt, wenn Sie das eine oder das andere verwenden sollten:

Outlets sollten in der Regel schwach sein, mit Ausnahme von denen von File Owner zu Top-Level-Objekte in einer Nib-Datei (oder, in iOS, eine Storyboard-Szene), die stark sein sollte. Outlets, die Sie erstellen, sollten daher in der Regel schwach sein, denn:

Outlets, die Sie beispielsweise in Teilansichten einer View-Controller-Ansicht oder eines Fenster-Controller-Fensters erstellen, sind beliebige Referenzen zwischen Objekten, die keine Eigentumsrechte implizieren. Die starken Steckdosen werden häufig durch Framework-Klassen angegeben (z. B. UViewViewController-View-Outlet oder NSWindowControllers Fenster-Outlet).

more

Verwandte Themen