这听起来像是一个完全愚蠢的问题,但我如何获得NSDictionary的字节大小?我可以将它转换为NSData,然后得到它的长度吗?
帮助!
答案 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);