Это может звучать как совершенно глупый вопрос, но как я могу получить размер в байтах NSDictionary? Могу ли я преобразовать его в NSData, а затем получить его длину?
Help!
Это может звучать как совершенно глупый вопрос, но как я могу получить размер в байтах NSDictionary? Могу ли я преобразовать его в NSData, а затем получить его длину?
Help!
Вы должны сказать больше о том, почему вы заботитесь о размере словаря в байтах, потому что ответ может быть различным в зависимости.
В общем, "размер" следа 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, но это будет значительно больше и потребует сотрудничества с вашими пользовательскими классами.
Вы можете получить размер любого класса, вызвав это:
#import "objc/runtime.h"
int size = class_getInstanceSize([NSDictionary class]);
Это вернет вам размер класса, но не фактический размер, занимаемый экземпляром объекта. Если вы хотите размер объекта-объекта:
#import "malloc/malloc.h"
int size = malloc_size(myObject);