Ich versuche, die von meiner iPhone-App verwendete Speichermenge jederzeit programmgesteuert abzurufen. Ja, mir sind ObjectAlloc / Leaks bekannt. Ich bin nicht an diesen interessiert, nur um zu wissen, ob es möglich ist, Code zu schreiben und die Anzahl der verwendeten Bytes zu ermitteln und über NSLog zu melden.
Vielen Dank.
ios
objective-c
iphone
cocoa-touch
memory
Coocoo4Cocoa
quelle
quelle
Antworten:
Um die tatsächlichen Speicherbytes abzurufen, die Ihre Anwendung verwendet, können Sie das folgende Beispiel ausführen. Sie sollten sich jedoch unbedingt mit den verschiedenen Profiling-Tools vertraut machen, da diese Ihnen ein viel besseres Bild der Nutzung insgesamt vermitteln sollen.
Es gibt auch ein Feld in der Struktur info.virtual_size, das Ihnen die Anzahl der verfügbaren virtuellen Bytes angibt (oder den Ihrer Anwendung in jedem Fall als potenzieller virtueller Speicher zugewiesenen Speicher). Der Code, mit dem pgb verknüpft ist, gibt an, wie viel Speicher für das Gerät verfügbar ist und um welche Art von Speicher es sich handelt.
quelle
Die Überschriften
TASK_BASIC_INFO
sagen:Hier ist eine Version mit
MACH_TASK_BASIC_INFO
:quelle
Hier ist report_memory () erweitert, um den Leckstatus im NSLog () schnell anzuzeigen.
quelle
Dies wurde auf Xcode 11 in Mojave 10.4.6 am 07/01/2019 getestet.
Alle vorherigen Antworten geben das falsche Ergebnis zurück .
Hier erfahren Sie, wie Sie den erwarteten Wert von Apples Quinn "The Eskimo!"
Dies verwendet die Variable
phys_footprint
vonDarwin > Mach > task_info
und stimmt eng mit dem Wert in der Speicheranzeige im Debug-Navigator von Xcode überein .Der zurückgegebene Wert wird in Byte angegeben.
https://forums.developer.apple.com/thread/105088#357415
Der Originalcode folgt.
Wenn Sie dies geringfügig ändern, um einen Satz von Swift-Methoden auf Klassenebene zu erstellen, können Sie die tatsächlichen Bytes und die formatierte Ausgabe in MB einfach zur Anzeige zurückgeben. Ich verwende dies als Teil einer automatisierten UITest-Suite, um den vor und nach mehreren Iterationen desselben Tests verwendeten Speicher zu protokollieren, um festzustellen, ob wir potenzielle Lecks oder Zuordnungen haben, die wir untersuchen müssen.
Genießen!
Hinweis: Ein unternehmungslustiger Codierer möchte der Klasse möglicherweise einen statischen Formatierer hinzufügen, sodass
usedMBAsString
nur 2 signifikante Dezimalstellen zurückgegeben werden.quelle
Schnelle Lösung der Antwort von Jason Coco :
quelle
Swift 3.1 (Stand 8. August 2017)
quelle
(1024*1024)
und nicht durch dividieren1000000
, um Megabyte aus Bytes zu erhalten.Hier ist eine Swift 3-Version:
quelle
Objective-C-Version:
quelle
Unten ist die richtige Antwort:
`` `
`` `
quelle