Przydziały instrumentów śledzą alloc i dealloc obiektów klas zdefiniowanych przez użytkownika
Czy jest możliwe śledzenie alokacji i dealokacji moich obiektów Objective-C? Na przykład, jeśli mam książkę klasową, chcę śledzić wszystkie alokacje i dealokacje obiektów typu Book. Mogę śledzić wszystkie domyślne klasy SKD, takie jak UIViewController, UIWindow, UIView, NSDictionary i inne, ale chcę śledzić również obiekty, które są utworzone z moich zdefiniowanych klas.
1 answers
Możesz użyć instrumentu alokacji, aby śledzić cykl życia swoich obiektów. Jeśli używasz szablonu "alokacje", jest on skonfigurowany do rejestrowania zdarzeń malloc
i free
. Możesz skonfigurować go tak, aby nagrywał również retain
, release
, i zdarzenia autorelease
poprzez włączenie pola wyboru "Record reference counts" w Ustawieniach instrumentu alokacji:
(nie można tego przełączać podczas nagrywania instrumentów, Co domyślnie uruchamia się, gdy tylko wybierzesz swój szablon.)
Aktualizacja dla Xcode 9: Apple utrudniło znalezienie tych ustawień. Teraz musisz wybrać instrument alokacji, a następnie z paska menu wybierz plik > opcje nagrywania.
Po uruchomieniu możesz znaleźć obiekty za pomocą widoku alokacje > statystyki > podsumowanie obiektów, który jest domyślnym ustawieniem dla panelu Szczegóły (dolnej połowy okna):
Jeśli chcesz zobaczyć obiekty, które w przypadku dealokacji przed zatrzymaniem biegu należy zmienić ustawienie żywotności alokacji z "Created & Still Living " (domyślne) na"All Objects Created":
Aby znaleźć obiekty określonej klasy, zacznij od wpisania nazwy klasy w polu wyszukiwania po prawej stronie paska narzędzi okna. Następnie znajdź nazwę klasy w kolumnie kategoria w widoku listy, najedź na nią myszką i kliknij strzałkę, która pojawi się obok niej. Na przykład moja aplikacja ma klasę o nazwie Tile
, więc poszukuję tego, a następnie klikam strzałkę obok Tile
w widoku listy:
Teraz Widok listy pokazuje każdą instancję Tile
. (Zauważ, że musisz wprowadzić rzeczywistą klasę obiektu, a nie klasę nadrzędną. Wpisanie NSObject
spowoduje znalezienie tylko obiektów, które zostały utworzone przez [NSObject alloc]
, a nie obiektów, które zostały utworzone przez [Tile alloc]
.) Mogę zobaczyć historię każdej konkretnej instancji, klikając strzałkę obok adresu tej instancji:
W widok szczegółów dla obiektu, mogę zobaczyć zdarzenia malloc
i free
, A ponieważ włączyłem "Record reference counts", mogę również zobaczyć retain
, release
, i autorelease
Wiadomości i ich wpływ na liczbę zatrzymań obiektu. Jeśli chcę zobaczyć stos wywołań dla któregokolwiek z tych zdarzeń, mogę otworzyć Rozszerzony panel szczegółów po prawej stronie okna:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-09 18:16:59