NSDictionary的字节大小

moo*_*ots 11 memory iphone cocoa nsdictionary

这可能听起来像一个完全愚蠢的问题,但我怎样才能获得NSDictionary的字节大小?我可以将它转换为NSData,然后得到它的长度?

救命!

Ben*_*tto 18

您应该更多地说明为什么您关心字典的大小(以字节为单位),因为答案可能会有所不同.

一般来说,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]);
Run Code Online (Sandbox Code Playgroud)

如果它包含其他自定义对象,您可以使用NSKeyedArchiver将其存档到NSData,但这将非常大,需要您的自定义类的合作.