NSMutableArray对象的总大小

36 cocoa-touch objective-c nsmutablearray ios

我有一个NSMutableArray包含大量对象的东西,我想弄清楚的是使用了多少内存array.看了几个地方,我知道调用的大小,当我做它时,我得到32位(这是NSMutableArray它自己的对象的大小).

示例代码:

NSMutableArray *temp = [[NSMutableArray alloc]init];
[temp addObject:objectxyz];
[temp addObject:objectabc];
[temp addObject:object123];
Run Code Online (Sandbox Code Playgroud)

现在我想知道大小:)

Sop*_*ert 100

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

[temp count]
Run Code Online (Sandbox Code Playgroud)

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


Ed *_*rty 8

size_t size = class_getInstanceSize([temp Class]);
for (id obj in temp) {
    size += class_getInstanceSize([obj Class]);
}
Run Code Online (Sandbox Code Playgroud)

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

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


cob*_*bal 5

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

  • 同意.使用`-count`将告诉你数组中有多少个对象,你可以乘以一个指针的大小来得到一个粗略的估计,但是数组可以使用更多的空间(特别是一个可变数组)所以这可以转无论如何,这是一个低调的猜测.根据您的目标,它可能会或可能没有比总结它所拥有的实例的大小更有帮助.总的来说,我同意@cobbal的观点,即多重所有权使事情变得复杂,并且知道确切的尺寸并不重要.对于大型数组或大型对象,是的,但与往常一样,首先测量性能.:-) (4认同)