NSMutableArray对象的总大小

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

示例代码:

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

现在我想知道大小:)

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

 [temp count] 

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

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

请注意, class_getInstanceSize是在/usr/include/objc/runtime.h中声明的

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

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

如果NSArray及其包含的所有对象及其所有子对象(recursion等)都响应NSCoder,则可以将该数组序列化为临时NSData内存块,然后获取该内存大小扁平的临时对象。

那么,你可以做这样的事情:

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

但是这并不能告诉你数组到底有多less存储空间,因为它可以dynamic增长,并且在任何给定的时间都可能拥有比它指向的对象更多的内存,当然你必须处理任何集合recursion。

如果你想知道你使用了多less内存,我build议你深入探讨一下Instruments的教程,然后让你的头脑围绕它提供的内存使用探测器。