NSDictionary 的字节大小

发布于 2024-10-20 15:18:36 字数 95 浏览 5 评论 0原文

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

帮助!

This may sound like a completely stupid question, but how can I get the size in bytes of an NSDictionary? Can I convert it to NSData, and then get the length of that?

Help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哭泣的笑容 2024-10-27 15:18:36

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

一般来说,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,但这会更大并且需要你的自定义类的配合。

You should say more about why you care about the size of the dictionary in bytes, because the answer might be different depending.

In general, the "size" of an NSDictionary's footprint in memory is not something you can see or care about. It abstracts its storage mechanism from the programmer, and uses some form of overhead beyond the actual data it's storing.

You can, however, serialize the dictionary to NSData. If the contents of the dictionary are only "primitive" types like NSNumber, NSString, NSArray, NSData, NSDictionary, you can use the NSPropertyListSerialization class to turn it into a binary property list, which will be about the most compact byte representation of its contents that you can get:

NSDictionary * myDictionary = /* ... */;
NSData * data = [NSPropertyListSerialization dataFromPropertyList:myDictionary
    format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL];    
NSLog(@"size: %d", [data length]);

If it contains other custom objects, you could use NSKeyedArchiver to archive it to an NSData, but this will be significantly larger and requires the cooperation of your custom classes.

苏佲洛 2024-10-27 15:18:36

您可以通过调用以下方法获取任何类的大小:

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

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

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

You can get the size of any class by calling this:

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

This will return you the size of the class, but not the actual size occupied by an instantiated object. If you want the size of an instantiated object:

#import "malloc/malloc.h"
int size = malloc_size(myObject);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文