Jak skonfigurować NSZombieEnabled
i CFZombieLevel
dla mojego pliku wykonywalnego w Xcode 4?
Jak skonfigurować NSZombieEnabled
i CFZombieLevel
dla mojego pliku wykonywalnego w Xcode 4?
Odpowiedzi:
W Xcode 4.x naciśnij
(lub kliknij Menubar
> Product
> Scheme
> Edit Scheme
)
wybierz kartę „Diagnostyka” i kliknij „Włącz obiekty zombie”:
Powoduje to, że uwolnione obiekty stają się instancjami NSZombie, które po ponownym użyciu drukują ostrzeżenia konsoli. Jest to pomoc w debugowaniu, która zwiększa wykorzystanie pamięci (żaden obiekt nie jest tak naprawdę uwalniany), ale poprawia raportowanie błędów.
Typowym przypadkiem jest nadmierne zwolnienie obiektu i nie wiadomo, który z nich:
-[UITableView release]: message sent to deallocated instance
To ustawienie Xcode jest ignorowane podczas archiwizowania aplikacji do przesłania do App Store. Nie musisz nic dotykać przed zwolnieniem aplikacji.
Naciśnięcie ⌥⌘Rjest takie samo, jak wybranie opcji Produkt> Uruchom przy jednoczesnym przytrzymaniu Altklawisza.
Kliknięcie pola wyboru „Włącz obiekty zombie” jest takie samo, jak ręczne dodanie „NSZombieEnabled = TAK” w sekcji „Zmienne środowiskowe” na karcie Argumenty.
CMD-<
( CMD-SHIFT-comma
) lubProduct -> Scheme -> Edit SCheme...
Uważam tę alternatywę za wygodniejszą:
Profile
Zombies
Gdy tylko zostanie wykryty zombie, otrzymasz zgrabny „stos zombie”, który pokazuje, kiedy przedmiot został przydzielony i gdzie został zachowany lub zwolniony:
Event Type RefCt Responsible Caller
Malloc 1 -[MyViewController loadData:]
Retain 2 -[MyDataManager initWithBaseURL:]
Release 1 -[MyDataManager initWithBaseURL:]
Release 0 -[MyViewController loadData:]
Zombie -1 -[MyService prepareURLReuqest]
Zalety w porównaniu do korzystania z karty diagnostycznej schematów Xcode :
Jeśli zapomnisz odznaczyć opcję na karcie diagnostycznej, żadne obiekty nie zostaną zwolnione z pamięci.
Otrzymasz bardziej szczegółowy stos, który pokazuje, w jaki sposób uszkodzony obiekt został przydzielony / zwolniony lub zatrzymany.
iOS Simulator > All
z głównej listy szablonów (możesz to zrobić tylko w symulatorze)
W Xcode 4.2
lub wybierz Edit Scheme
z Product
> Scheme
Menu
wybierz Enable Zombie Objects
z Diagnostics
zakładki
Alternatywnie, jeśli wolisz .xcconfig
pliki, możesz przeczytać ten artykuł https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
Kakao oferuje fajną funkcję, która znacznie zwiększa twoje możliwości debugowania takich sytuacji. Jest to zmienna środowiskowa o nazwie NSZombieEnabled, obejrzyj ten film wyjaśniający konfigurację NSZombieEnabled w celu-C
W Xcode> 4.3:
Kliknij rozwijany pasek schematu -> edytuj schemat -> kartę argumentów, a następnie dodaj NSZombieEnabled w kolumnie Zmienne środowiskowe i YES w kolumnie wartości.
Powodzenia !!!