Es scheint, dass sich im Laufe der Jahre etwas verändert hat und Apple jetzt im Allgemeinen empfiehlt, in der Regel stark zu verwenden. Der Beweis für ihre WWDC-Sitzung befindet sich unter Sitzung 407 - Implementierung von UI-Designs in Interface Builder und beginnt um 32:30. Meine Notiz von dem, was er sagt, ist (fast, wenn nicht genau, zitiere ihn):
-
Outlet-Verbindungen sollten im Allgemeinen stark sein, insbesondere wenn wir eine Subview oder Einschränkung verbinden, die nicht immer von der Ansichtshierarchie zurückgehalten wird
-
Schwache Outlet-Verbindung könnte erforderlich sein, wenn benutzerdefinierte Ansichten erstellt werden, die einen Verweis auf etwas in der Ansichtshierarchie haben, und im Allgemeinen wird dies nicht empfohlen
Anders ausgedrückt sollte es jetzt immer stark sein, solange unsere benutzerdefinierte Ansicht keinen Zyklus mit einigen Ansichten in der Ansichtshierarchie erstellt
BEARBEITEN:
Einige mögen die Frage stellen. Verursacht das Halten einer starken Referenz keinen Zyklus, da der Stamm-Ansichtscontroller und die besitzende Ansicht die Referenz dazu behalten? Oder warum hat sich das geändert? Ich glaube, die Antwort findet sich früher in diesem Vortrag, als sie beschreiben, wie die xibs aus dem xib erstellt werden. Es wird ein separates xib für einen VC und für die Ansicht erstellt. Ich glaube, das könnte der Grund sein, warum sie die Empfehlungen geändert haben. Es wäre jedoch schön, eine tiefere Erklärung von Apple zu erhalten.
11 Stimmen
Als Hinweis,
IBOutletCollection()
darf nichtweak
sein, ansonsten wird es alsnil
zurückgegeben.0 Stimmen
Xcode 8.2.1 verwendet weak, wenn IBOutlets über den Interface Builder erstellt werden. Viele Antworten hier auf SO raten jedoch, strong zu verwenden.
1 Stimmen
@neoneye Ich habe es gerade mit xcode 8.3.2 ausprobiert, indem ich vom Storyboard zur Swift-Datei gezogen habe, und es wird standardmäßig auf
strong
festgelegt.