Размер в байтах NSDictionary - PullRequest
11 голосов
/ 06 марта 2011

Это может звучать как совершенно глупый вопрос, но как я могу получить размер в байтах NSDictionary?Могу ли я преобразовать его в NSData, а затем получить его длину?

Help!

Ответы [ 2 ]

18 голосов
/ 06 марта 2011

Вы должны сказать больше о том, почему вы заботитесь о размере словаря в байтах, потому что ответ может быть разным в зависимости.

В общем, "размер" занимаемой памяти NSDictionary не является чем-тоВы можете видеть или заботиться о.Он абстрагирует свой механизм хранения от программиста и использует некоторую форму служебных данных помимо фактических данных, которые он хранит.

Однако вы можете сериализовать словарь в NSData.Если содержимое словаря имеет только «примитивные» типы, такие как NSNumber, NSString, NSArray, NSData, NSDictionary, вы можете использовать класс NSPropertyListSerialization, чтобы превратить его в список двоичных свойств, который будет представлять собой наиболее компактное байтовое представление его содержимого.что вы можете получить:

NSDictionary * myDictionary = /* ... */;
NSData * data = [NSPropertyListSerialization dataFromPropertyList:myDictionary
    format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL];    
NSLog(@"size: %d", [data length]);

Если он содержит другие пользовательские объекты, вы можете использовать NSKeyedArchiver для архивирования их в NSData, но это будет значительно больше и требует взаимодействия ваших пользовательских классов.

2 голосов
/ 06 марта 2011

Вы можете получить размер любого класса, позвонив по этому номеру:

#import "objc/runtime.h"
int size = class_getInstanceSize([NSDictionary class]);

Это вернет вам размер класса, но не фактический размер, занимаемый экземпляром объекта. Если вы хотите размер экземпляра объекта:

#import "malloc/malloc.h"
int size = malloc_size(myObject);
...