如何在iOS中查找任何对象的大小

时间:2011-11-22 07:50:44

标签: iphone objective-c cocoa-touch ios4

我正在优化我的应用,并想知道对象的大小是多少,以便我也可以在日志中显示它。

假设我有

   NSDictionary *temp=(NSDictionary*)[Data objectAtIndex:i];

    //data is defined in the .h file 

现在我怎么知道对象temp的大小是多少。

我尝试使用变量视图,在temp部分我找到了 instance_size =(long int)30498656

instance_size是我临时对象的确切大小吗?。

我也试过

        sizeof(temp);

但它在那一点上崩溃了。 任何帮助...

5 个答案:

答案 0 :(得分:27)

编译器只知道指针,这就是它总是返回指针大小的原因。要查找已分配对象的大小,请尝试

NSLog(@"size of Object: %zd", malloc_size(myObject));

答案 1 :(得分:11)

首先,我认为从上面的帖子可以清楚地看出,对象大小是由malloc_size(myObject)给出的,正如Legolas和Mac OS reference manual所建议的那样:

  

malloc_size(ptr)函数返回内存块的大小   支持ptr指向的分配。内存块大小是   总是至少和它支持的分配一样大,也可能是   大。

但是如果你有兴趣找出字典的大小,请记住以下几点:

字典存储键值对,并且在值部分中不包含对象本身,只是增加了要“添加”的对象的保留计数,并保留该对象的引用。现在,字典本身只包含对各种对象的引用(附带一个键)。因此,如果您正在寻找字典所引用的所有对象的对象大小,从技术上讲,这将不是字典的大小。字典的大小将是所有键的大小加上所有键引用的大小加上父NSObject的大小的总和。如果您仍然想要找出所引用对象的大小,请尝试迭代字典值数组:

NSArray *myArray = [myDictionary allValues];
id obj = nil;
int totalSize = 0;
for(obj in myArray)
{
    totalSize += malloc_size(obj);
}
//totalSize now contains the total object size of the refered objects in the dictionary.

Reference

答案 2 :(得分:4)

我建议您使用class_getInstanceSizemalloc_good_size来查看它将会是什么。这不会显示返回大小内的ivars和whatnot。

#import <malloc/malloc.h>
#import <objc/runtime.h>

NSLog(@"Object Size: %zd", malloc_good_size(class_getInstanceSize([yourObject class])));

答案 3 :(得分:0)

变量temp是内存地址。我们无法通过编程获得对象内存大小。 我们可以使用Allocations工具来优化xcode中的app。点击xcode4中的Command+I即可找到它。

答案 4 :(得分:0)

在目标-C:

NSString *sampleString = @"iOS Programming";
 NSLog(@"size of object: %zd", malloc_size((__bridge const void *)(sampleString)));

You need to include:
#import<malloc/malloc.h>

在Swift中:

var name: String = "Hello World!"

sizeofValue(name)

var someValue: Double = 10.5

sizeofValue(someValue)