Aje*_*rya 19 iphone cocoa-touch objective-c ios4
我正在优化我的应用程序并想知道对象的大小是多少,所以我也可以在日志中显示它.
假设我有
NSDictionary *temp=(NSDictionary*)[Data objectAtIndex:i];
//data is defined in the .h file
Run Code Online (Sandbox Code Playgroud)
现在我怎么知道对象temp的大小是多少.
我尝试使用变量视图,在temp部分中我发现了instance_size =(long int)30498656
instance_size是我临时对象的确切大小吗?
我也试过了
sizeof(temp);
Run Code Online (Sandbox Code Playgroud)
但它在那一点上崩溃了.任何帮助......
Leg*_*las 30
编译器只知道指针,这就是它总是返回指针大小的原因.要找到分配对象的大小,请尝试类似的方法
NSLog(@"size of Object: %zd", malloc_size(myObject));
Run Code Online (Sandbox Code Playgroud)
Par*_*fna 11
首先,我认为从上面的帖子可以清楚地看出,对象大小是malloc_size(myObject)由Legolas和Mac OS参考手册中提供的:
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.
Run Code Online (Sandbox Code Playgroud)
小智 5
我建议使用class_getInstanceSize和malloc_good_size查看它的含义。这不会在返回的大小内显示空值和其他内容。
#import <malloc/malloc.h>
#import <objc/runtime.h>
NSLog(@"Object Size: %zd", malloc_good_size(class_getInstanceSize([yourObject class])));
Run Code Online (Sandbox Code Playgroud)