J'essaie de récupérer la quantité de mémoire utilisée par mon application iPhone à tout moment, par programmation. Oui, je connais ObjectAlloc / Leaks. Je ne suis pas intéressé par ceux-ci, seulement pour savoir s'il est possible d'écrire du code et d'obtenir la quantité d'octets utilisée et de la signaler via NSLog.
Merci.
ios
objective-c
iphone
cocoa-touch
memory
Coocoo4Cocoa
la source
la source
Réponses:
Pour obtenir les octets réels de mémoire que votre application utilise, vous pouvez faire quelque chose comme l'exemple ci-dessous. Cependant, vous devez vraiment vous familiariser avec les différents outils de profilage et ils sont conçus pour vous donner une bien meilleure image de l'utilisation dans son ensemble.
Il y a aussi un champ dans la structure info.virtual_size qui vous donnera le nombre d'octets de mémoire virtuelle disponible (ou de mémoire allouée à votre application comme mémoire virtuelle potentielle dans tous les cas). Le code auquel pgb se connecte vous donnera la quantité de mémoire disponible pour l'appareil et le type de mémoire dont il s'agit.
la source
Les en-têtes pour
TASK_BASIC_INFO
dire:Voici une version utilisant
MACH_TASK_BASIC_INFO
:la source
Voici report_memory () amélioré pour afficher rapidement l'état des fuites dans NSLog ().
la source
Cela a été testé sur Xcode 11 dans Mojave 10.4.6 le 07/01/2019.
Toutes les réponses précédentes renvoient un résultat incorrect .
Voici comment obtenir la valeur attendue écrite par Quinn d'Apple «The Eskimo!».
Cela utilise le
phys_footprint
var fromDarwin > Mach > task_info
et correspond étroitement à la valeur de la jauge de mémoire dans le navigateur de débogage de Xcode .La valeur renvoyée est en octets.
https://forums.developer.apple.com/thread/105088#357415
Le code original suit.
Le modifier légèrement pour créer un ensemble de méthodes Swift au niveau de la classe permet de retourner facilement les octets réels et la sortie formatée en Mo pour l'affichage. J'utilise cela dans le cadre d'une suite UITest automatisée pour enregistrer la mémoire utilisée avant et après plusieurs itérations du même test pour voir si nous avons des fuites ou des allocations potentielles que nous devons examiner.
Prendre plaisir!
Remarque: un codeur entreprenant peut souhaiter ajouter un formateur statique à la classe afin qu'il
usedMBAsString
ne renvoie que 2 décimales significatives.la source
Solution rapide de la réponse de Jason Coco :
la source
Swift 3.1 (au 8 août 2017)
la source
(1024*1024)
, pas par1000000
, pour obtenir des mégaoctets d'octets.Voici une version Swift 3:
la source
Version Objective-C:
la source
Voici la bonne réponse:
''
''
la source