我正在优化我的应用,并想知道对象的大小是多少,以便我也可以在日志中显示它。
假设我有
NSDictionary *temp=(NSDictionary*)[Data objectAtIndex:i];
//data is defined in the .h file
现在我怎么知道对象temp的大小是多少。
我尝试使用变量视图,在temp部分我找到了 instance_size =(long int)30498656
instance_size是我临时对象的确切大小吗?。
我也试过
sizeof(temp);
但它在那一点上崩溃了。 任何帮助...
答案 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.
答案 2 :(得分:4)
我建议您使用class_getInstanceSize
和malloc_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)
NSString *sampleString = @"iOS Programming";
NSLog(@"size of object: %zd", malloc_size((__bridge const void *)(sampleString)));
You need to include:
#import<malloc/malloc.h>
var name: String = "Hello World!"
sizeofValue(name)
var someValue: Double = 10.5
sizeofValue(someValue)