NSDictionary的字节大小

时间:2011-03-05 22:28:16

标签: iphone cocoa memory nsdictionary

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

帮助!

2 个答案:

答案 0 :(得分: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]);

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

答案 1 :(得分:2)

你可以通过调用它来获得任何类的大小:

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

这将返回类的大小,但不会返回实例化对象占用的实际大小。如果您想要实例化对象的大小:

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