web-dev-qa-db-fra.com

Taille totale de l'objet NSMutableArray

J'ai un NSMutableArray qui contient un tas d'objets, ce que j'essaie de comprendre, c'est la quantité de mémoire que le array utilise. Après avoir regardé quelques endroits, je connais la taille de l'appel, et quand je le fais, j'obtiens 32 bits (qui est la taille de l'objet NSMutableArray lui-même).

Exemple de code:

NSMutableArray *temp = [[NSMutableArray alloc]init];
[temp addObject:objectxyz];
[temp addObject:objectabc];
[temp addObject:object123];

maintenant je veux connaître la taille :)

36
sj wengi

Pour obtenir le nombre d'objets dans le tableau, utilisez

[temp count]

Si vous voulez utiliser la mémoire totale du tableau, vous devrez parcourir et ajouter la quantité de mémoire utilisée par chaque objet, mais je ne pense pas qu'un objet générique vous donnera sa taille. En général, vous ne devriez cependant pas vraiment vous soucier de l'utilisation de la mémoire.

100
Sophie Alpert
size_t size = class_getInstanceSize([temp Class]);
for (id obj in temp) {
    size += class_getInstanceSize([obj Class]);
}

Notez que class_getInstanceSize est déclaré dans /usr/include/objc/runtime.h

Notez également que cela ne comptera que la taille de la mémoire des ivars déclarés dans chaque classe.

8
Ed Marty

Il n'y a aucun moyen direct de le faire car tous les objets sont simplement stockés par référence. Il n'y a pas de notion concrète de "taille" dans le cacao, d'autant plus que les objets peuvent avoir plusieurs propriétaires, ce qui pourrait entraîner un double comptage ou d'autres problèmes.

5
cobbal

Si le NSArray, et tous les objets qu'il contient, et tous leurs sous-objets (récursivement etc.) répondent à NSCoder, vous pourriez être en mesure de sérialiser le tableau en un bloc de mémoire NSData temporaire, puis d'obtenir la taille de mémoire de celui-ci objet temporaire plat.

4
hotpaw2

Eh bien, vous pourriez faire quelque chose comme:

size_t total;
id obj;
for (obj in temp)
  {
  total += class_getInstanceSize([obj class]);
  }

mais cela ne vous dit pas exactement la quantité de stockage que le tableau utilise réellement, car il peut croître dynamiquement et peut avoir plus de mémoire à tout moment qu'il n'en a besoin pour les seuls objets vers lesquels il pointe, et bien sûr, vous devrez gérer les collections de manière récursive.

Si vous essayez d'avoir une idée de la quantité de mémoire que vous utilisez, je vous suggère de fouiller dans les didacticiels pour les instruments et de vous familiariser avec les sondes d'utilisation de la mémoire qu'il fournit.

2
NSResponder