Размер байта NSDictionary

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

Help!

Ответ 1

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

В общем, "размер" следа 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

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

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

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

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