NSArray的大小

Mil*_*esh 8 objective-c ios4

当我试图检查声明没有任何容量的NSArray的大小时,我发现它4.现在问题是为什么它总是4?请帮帮我找到它....谢谢

Chu*_*uck 13

如果您正在谈论sizeof,那么找出NSArray持有多少数据并不是正确的方法.Objective-C对象总是通过指针访问,iPhone上指针的大小是4个字节.这sizeof就是告诉你的.要找出数组中有多少个对象,请询问数组count.


bbu*_*bum 6

鉴于这种:

NSArray *foo;
NSLog(@"%d", sizeof(foo));
Run Code Online (Sandbox Code Playgroud)

您将获得4或8,具体取决于您使用的是32位还是64位系统.请注意,我非常有目的地没有初始化foo; 没有必要这样做,因为sizeof(foo)它给出了字节大小,foo而且foo只是一个指向对象的随机指针.如果那都是id foo; void*foo; NSString*foo;4或8 都没关系.

如果您想要分配特定类的实例的大小,Objective-C运行时会提供可以完全执行此操作的内省API.但是,我真的没有想到为什么这会在一个程序中过于有趣.

请注意,实例的分配大小不考虑任何子分配.即NSArray可能有一个后备存储,这是一个单独的分配.

重申:

上面代码中的sizeof(foo)与分配的实例的大小无关.