Próbuję w dowolnym momencie programowo pobrać ilość pamięci używanej przez moją aplikację na iPhone'a. Tak, wiem o ObjectAlloc / Leaks. Nie jestem tym zainteresowany, tylko po to, aby wiedzieć, czy można napisać jakiś kod i uzyskać ilość wykorzystanych bajtów i zgłosić to przez NSLog.
Dzięki.
ios
objective-c
iphone
cocoa-touch
memory
Coocoo4Cocoa
źródło
źródło
Odpowiedzi:
Aby uzyskać faktyczne bajty pamięci używanej przez aplikację, możesz zrobić coś podobnego do poniższego przykładu. Jednak naprawdę powinieneś zapoznać się z różnymi narzędziami do profilowania, ponieważ są one zaprojektowane tak, aby dać ci znacznie lepszy obraz ogólnego zastosowania.
W strukturze znajduje się również pole info.virtual_size, które poda liczbę bajtów dostępnej pamięci wirtualnej (lub pamięć przydzieloną aplikacji jako potencjalną pamięć wirtualną w każdym przypadku). Kod, z którym łączy się pgb, poda ilość pamięci dostępnej dla urządzenia i rodzaj pamięci.
źródło
Nagłówki do
TASK_BASIC_INFO
powiedzenia:Oto wersja wykorzystująca
MACH_TASK_BASIC_INFO
:źródło
Oto ulepszona funkcja report_memory (), aby szybko pokazać stan wycieku w NSLog ().
źródło
Zostało to przetestowane na Xcode 11 w Mojave 10.4.6 w dniu 07.01.2019.
Wszystkie poprzednie odpowiedzi zwróciły nieprawidłowy wynik .
Oto jak uzyskać oczekiwaną wartość napisaną przez Quinna z Apple „The Eskimo!”.
Używa
phys_footprint
var fromDarwin > Mach > task_info
i ściśle pasuje do wartości w mierniku pamięci w nawigatorze debugowania Xcode .Zwracana wartość jest w bajtach.
https://forums.developer.apple.com/thread/105088#357415
Kod oryginalny.
Nieznaczne zmodyfikowanie tego w celu utworzenia zestawu metod Swift na poziomie klasy umożliwia łatwe zwracanie rzeczywistych bajtów i sformatowanych danych wyjściowych w MB do wyświetlenia. Używam tego jako części zautomatyzowanego zestawu UITest do rejestrowania pamięci używanej przed i po wielu iteracjach tego samego testu, aby sprawdzić, czy mamy jakiekolwiek potencjalne wycieki lub alokacje, które musimy sprawdzić.
Cieszyć się!
Uwaga: przedsiębiorczy programista może chcieć dodać statyczny program formatujący do klasy, aby
usedMBAsString
zwracał tylko 2 znaczące miejsca dziesiętne.źródło
Szybkie rozwiązanie odpowiedzi Jasona Coco :
źródło
Swift 3.1 (od 8 sierpnia 2017 r.)
źródło
(1024*1024)
, a nie przez1000000
.Oto wersja Swift 3:
źródło
Wersja Objective-C:
źródło
Poniżej poprawna odpowiedź:
`` ''
`` ''
źródło