NSMutableArray对象的总大小

时间:2009-10-04 03:51:19

标签: ios objective-c cocoa-touch nsmutablearray

我有一个NSMutableArray,它拥有一堆对象,我想弄清楚的是array使用了多少内存。看了几个地方,我知道调用的大小,当我创建它时,我得到32位(这是它自己的NSMutableArray对象的大小。)

示例代码:

NSMutableArray *temp = [[NSMutableArray alloc]init];
[temp addObject:objectxyz];
[temp addObject:objectabc];
[temp addObject:object123];

现在我想知道尺寸:)

5 个答案:

答案 0 :(得分:98)

要获取数组中的对象数,请使用

[temp count]

如果你想要数组的总内存使用量,你必须循环并添加每个对象使用多少内存,但我不认为通用对象会给你它的大小。一般来说,你不应该真的担心内存使用情况。

答案 1 :(得分:7)

size_t size = class_getInstanceSize([temp Class]);
for (id obj in temp) {
    size += class_getInstanceSize([obj Class]);
}

请注意{/ 3}}在/usr/include/objc/runtime.h中声明

另请注意,这只会计算每个类中声明的ivars的内存大小。

答案 2 :(得分:5)

没有直接的方法可以做到这一点,因为所有对象都只是通过引用存储。在可可中没有“大小”的具体概念,特别是因为物体可能有多个所有者,这可能导致重复计算或其他问题。

答案 3 :(得分:4)

如果NSArray及其包含的所有对象及其所有子对象(递归等)响应NSCoder,您可能能够将该数组序列化为临时NSData内存块,然后获取内存大小那个扁平的临时物体。

答案 4 :(得分:2)

嗯,你可以这样做:

size_t total;
id obj;
for (obj in temp)
  {
  total += class_getInstanceSize([obj class]);
  }

但这并没有告诉你确切地数组实际使用了多少存储空间,因为它可以动态增长,并且在任何给定时间可能拥有的内存超过它所指向的对象所需的内存数量当然,你必须递归地处理任何收藏品。

如果你想知道你正在使用多少内存,我建议深入研究Instruments的教程,并了解它提供的内存使用探测器。