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.

Author: Monolo, 2013-02-15

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:

pole wyboru record reference counts

(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):

Ustawienie podsumowania obiektu dla panelu Szczegóły

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":

Ustawienie żywotności alokacji

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:

Szukanie

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:

Uzyskiwanie szczegółów

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:

Rozszerzony szczegół stosu wywołań

 214
Author: rob mayoff,
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