IBOutlet
powinien być silny, ze względu na wydajność. Zobacz temat Storyboard Reference, Strong IBOutlet, Scene Dock w iOS 9
Jak wyjaśniono w tym akapicie, ujścia widoków podrzędnych widoku kontrolera widoku mogą być słabe, ponieważ te widoki podrzędne są już własnością obiektu najwyższego poziomu pliku stalówki. Jednak gdy ujście jest zdefiniowane jako słaby wskaźnik, a wskaźnik jest ustawiony, ARC wywołuje funkcję środowiska wykonawczego:
id objc_storeWeak(id *object, id value);
Spowoduje to dodanie wskaźnika (obiektu) do tabeli przy użyciu wartości obiektu jako klucza. Ta tabela jest nazywana słabą tabelą. ARC używa tej tabeli do przechowywania wszystkich słabych wskaźników twojej aplikacji. Teraz, gdy wartość obiektu zostanie zwolniona, ARC będzie iterować po słabej tabeli i ustawi słabe odniesienie na zero. Alternatywnie ARC może zadzwonić:
void objc_destroyWeak(id * object)
Następnie obiekt jest niezarejestrowany i obiekt objc_destroyWeak wywołuje ponownie:
objc_storeWeak(id *object, nil)
Księgowość związana ze słabym odniesieniem może potrwać 2–3 razy dłużej niż wydanie silnego odniesienia. Tak więc słabe odniesienie wprowadza narzut środowiska wykonawczego, którego można uniknąć, po prostu definiując gniazda jako silne.
Jak sugeruje Xcode 7 strong
Jeśli oglądasz sesję 407 WWDC 2015 Implementowanie projektów interfejsu użytkownika w Konstruktorze interfejsów , sugeruje (transkrypcja z http://asciiwwdc.com/2015/sessions/407 )
Ostatnią opcją, na którą chcę zwrócić uwagę, jest typ pamięci, który może być mocny lub słaby.
Zasadniczo powinieneś wzmocnić swoje ujście, szczególnie jeśli podłączasz ujście do widoku podrzędnego lub do ograniczenia, które nie zawsze będzie zachowane przez hierarchię widoków.
Jedynym czasem, kiedy naprawdę potrzebujesz osłabić gniazdko, jest posiadanie niestandardowego widoku, który odwołuje się do czegoś, co tworzy kopię zapasową hierarchii widoków i ogólnie nie jest to zalecane.
Więc wybiorę silny i kliknę Connect, który wygeneruje mój wylot.
IBOutletCollection()
nie może byćweak
, w przeciwnym razie zwraca jakonil
.