Sposób znalezienia silne cykle odniesienia jest taki sam Swift, jak to jest w celu C.
Uruchomiłbyś aplikację z Xcode, uruchom aplikację wystarczająco, aby zamanifestować cykl, a następnie naciśnij przycisk "debug memory graph" (). Następnie można wybrać niepublikowane obiekt w panelu po lewej stronie i pokaże wykres pamięci, często które mogą wyraźnie silne cykle referencyjne:
Czasami cykle pamięci nie są tak oczywiste jak to, ale możesz przynajmniej zobaczyć, jaki obiekt ma silne odniesienie do danego obiektu. Jeśli to konieczne, możesz śledzić wstecz i określić, co ma silne odniesienie do tego i tak dalej.
Niekiedy wiadomo, jakiego rodzaju obiekt utrzymuje, silne odniesienie jest niewystarczające i naprawdę chcesz wiedzieć, gdzie w kodzie znajduje się silne odniesienie.Opcja "malloc stack", jak pokazano w https://stackoverflow.com/a/30993476/1271826, może być użyta do zidentyfikowania stosu wywołań, kiedy ustalono silne odniesienie (często pozwalając ci zidentyfikować dokładną linię kodu, w której ustalono te silne referencje). Aby uzyskać więcej informacji, zobacz wideo o WWDC 2016: Visual Debugging with Xcode.
Instrumentów można również używać do identyfikowania wycieków obiektów. Po prostu uruchom aplikację za pomocą Instrumentów za pomocą narzędzia Przydziały, nie tylko raz lub dwa razy, a następnie przywróć aplikację do stanu stabilnego, a jeśli pamięć nadal będzie się zwiększać, najprawdopodobniej uzyskasz mocny cykl odniesienia. Możesz użyć narzędzia Przydziały, aby określić, jakiego rodzaju obiekty nie są wydawane, użyj funkcji "licznika rekordów", aby dokładnie ustalić, gdzie zostały utworzone te silne referencje, itp.
Zobacz wideo z WWDC 2013 Fixing Memory Issues i WWDC 2012 wideo do wprowadzania do identyfikacji i rozwiązywania problemów z pamięcią. Podstawowe proponowane tam techniki są nadal aktualne (chociaż narzędzia UI Instruments zmieniły się nieco ... jeśli chcesz wprowadzić do lekko zmienionego interfejsu, zobacz WWDC 2014 wideo Improving Your App with Instruments).
Na marginesie "wywóz śmieci" odnosi się do bardzo odmiennego systemu pamięci i nie ma tu zastosowania.
Jestem nowy w tym ekosystemie (więc nie znam Celu C), więc od teraz jest to ARC. –
To jest w porządku, ponieważ koncepcje są w dużej mierze takie same. Byłbym zaskoczony, gdybyś zobaczył dyskusje w silnych cyklach odniesienia Objective-C i nie byliby w stanie natychmiast zastosować tego do twojego programowania Swift (zwłaszcza, że znasz składnię 'unowned' i' weak' w Swift). – Rob