Widziałem propozycje mówiące ustawić NSZombieEnabled
aby true
podczas debugowania. Co to jest NSZombie? Czy to ramy? Ustawienie?
Widziałem propozycje mówiące ustawić NSZombieEnabled
aby true
podczas debugowania. Co to jest NSZombie? Czy to ramy? Ustawienie?
Odpowiedzi:
To pomoc w debugowaniu pamięci. W szczególności, gdy ustawisz NSZombieEnabled
to, gdy obiekt osiągnie liczbę zachowań 0, zamiast zostać zwolniony, przekształca się w NSZombie
instancję. Za każdym razem, gdy taki zombie otrzyma wiadomość, rejestruje ostrzeżenie, a nie ulega awarii lub zachowuje się w nieprzewidywalny sposób. W związku z tym możesz debugować subtelne problemy z nadmiernym wydaniem / automatycznym zwolnieniem bez zaawansowanych narzędzi lub żmudnej igły w wyszukiwaniu stogów siana.
Nazwa jest dość oczywistą grą na fakcie, że przedmioty są zwykle uważane za „martwe”, gdy osiągną liczbę 0. W tym ustawieniu nadal istnieją w dziwnym okresie półtrwania - ani żywe, ani całkiem martwe. Podobnie jak prawdziwe zombie, tyle że jedzą mniej mózgów.
Adam wykonał świetną robotę, wyjaśniając, czym są Zombie, ale używanie zmiennej środowiskowej nie jest najlepszym sposobem na ich znalezienie i śledzenie.
Znacznie lepszym podejściem do wykrywania zombie jest po prostu użycie narzędzi - od XCode zacznij od „Uruchom z instrumentem” i wybierz „Przydziały”.
Następnie zatrzymaj nagrywanie zaraz po jego rozpoczęciu, naciśnij przycisk „i” na instrumencie alokacje i włącz „włącz liczniki referencyjne” i „Włącz wykrywanie NSZombie”. Teraz ponownie naciśnij Record w instrumencie, a Twoja aplikacja uruchomi się - jeśli zostaną wysłane jakiekolwiek obiekty zombie, nagrywanie wiadomości zostanie zatrzymane, a na osi czasu nagrywania pojawi się okno dialogowe - możesz kliknąć, aby znaleźć każde miejsce, w którym obiekt był zatrzymane lub zwolnione.
Edycja: Poprzednia rada dotyczyła XCode 3, oto dodatek do XCode 4:
W XCode 4.2 jest jeszcze łatwiejszy mechanizm wykorzystania wykrywania zombie - Zombie Instrument. Zamiast „Uruchom”, aby uruchomić aplikację, użyj opcji „Profil”, a pojawi się selektor instrumentów. Wybierz „Zombie”, a aplikacja zacznie działać - zrób wszystko, co spowodowało awarię, pojawi się okno dialogowe z komunikatem „Zombie Messaged”.
Następnie kliknij małą strzałkę w oknie dialogowym. Spowoduje to wyświetlenie listy wszystkich czasów, gdy obiekt zombie został utworzony, zachowany lub wydany. Podciągnij boczny pasek i możesz przejść do każdego wpisu, patrząc na ślad stosu dla kodu, który był odpowiedzialny za każdą korektę liczby zatrzymań.
Zgadzam się z tym, co dodał Kendall, jest to bardzo przydatne, ale sugeruję nadal robić zmienne środowiskowe, aby nie zapomnieć, że są włączone. Podobnie jak (wygasły) link w Cocoa Dev, umieściłem to, aby go nie przegapić:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
Bardzo ładnie przykuwa moją uwagę.
Pomógłby komuś.
Szczegółowy dokument dotyczący instrumentów. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1