IBOutlet
sollte aus Leistungsgründen stark sein. Siehe Storyboard-Referenz, Starkes IBOutlet, Szenendock in iOS 9
Wie in diesem Absatz erläutert, können die Ausgänge zu Unteransichten der Ansicht des Ansichtscontrollers schwach sein, da diese Unteransichten bereits dem Objekt der obersten Ebene der NIB-Datei gehören. Wenn ein Outlet jedoch als schwacher Zeiger definiert und der Zeiger gesetzt ist, ruft ARC die Laufzeitfunktion auf:
id objc_storeWeak(id *object, id value);
Dadurch wird der Zeiger (Objekt) zu einer Tabelle hinzugefügt, wobei der Objektwert als Schlüssel verwendet wird. Diese Tabelle wird als schwache Tabelle bezeichnet. ARC verwendet diese Tabelle, um alle schwachen Zeiger Ihrer Anwendung zu speichern. Wenn der Objektwert freigegeben wird, durchläuft ARC die schwache Tabelle und setzt die schwache Referenz auf Null. Alternativ kann ARC anrufen:
void objc_destroyWeak(id * object)
Dann wird das Objekt nicht registriert und objc_destroyWeak ruft erneut auf:
objc_storeWeak(id *object, nil)
Diese mit einer schwachen Referenz verbundene Buchhaltung kann zwei- bis dreimal länger dauern als die Veröffentlichung einer starken Referenz. Eine schwache Referenz führt also zu einem Overhead für die Laufzeit, den Sie vermeiden können, indem Sie Outlets einfach als stark definieren.
Ab Xcode 7 schlägt es vor strong
Wenn Sie sich die WWDC 2015-Sitzung 407 zum Implementieren von UI-Designs in Interface Builder ansehen , wird dies vorgeschlagen (Transkript von http://asciiwwdc.com/2015/sessions/407 ).
Und die letzte Option, auf die ich hinweisen möchte, ist der Speichertyp, der entweder stark oder schwach sein kann.
Im Allgemeinen sollten Sie Ihren Ausgang stark machen, insbesondere wenn Sie einen Ausgang mit einer Unteransicht oder einer Einschränkung verbinden, die nicht immer von der Ansichtshierarchie beibehalten wird.
Das einzige Mal, wenn Sie eine Steckdose wirklich schwach machen müssen, ist, wenn Sie eine benutzerdefinierte Ansicht haben, die auf etwas verweist, das die Ansichtshierarchie sichert, und dies wird im Allgemeinen nicht empfohlen.
Also werde ich stark wählen und auf Verbinden klicken, um meine Steckdose zu generieren.
IBOutletCollection()
darf nicht seinweak
, sonst gibt es als zurücknil
.