NSArray的大小

Flo*_*ent 48 arrays objective-c ios

如何获得a的大小NSArray并在控制台中使用NSLog

Ale*_*yne 79

int size = [array count];
NSLog(@"there are %d objects in the array", size);
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,它应该是`NSUInteger size = ...`,但无论如何都是+1.:) (5认同)
  • @Chuck,文档说分别对“NSInteger”和“NSUInteger”使用“%ld”和“%lu”。http://developer.apple.com/mac/library/documentation/cocoa/conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW5 (2认同)

Dav*_*ong 10

另一个答案的答案:

你不能以兆字节为单位获得数组的大小,至少不能没有做一些棘手的,不支持的*C voodoo.NSArray是一个类集群,这意味着我们不知道它是如何在内部实现的.实际上,所使用的实现可以根据阵列中有多少项而改变.此外,数组的大小与数组引用的对象的大小不相交,因为这些对象位于堆上的其他位置.即使是保存对象指针的结构在技术上也不是数组的"部分",因为它不一定calloc紧挨NSArray着堆上的实际值.

如果你想要数组结构本身的大小,那么显然只有4个字节:

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

打印:

2010-03-24 20:08:33.334 EmptyFoundation[90062:a0f] Size: 4
Run Code Online (Sandbox Code Playgroud)

(当然,这不是一个合适的表示,因为NSArray它可能只是另一种对象的抽象接口,通常类似于NSCFArray.如果你查看NSArray.h,你会看到一个NSArray没有实例变量.对于应该有的东西很奇怪拿着其他物品,嗯?)

* "不支持"我的意思是"不推荐","深入研究类集群的内在神秘主义",以及"无证件和私有API,如果它甚至存在"


cra*_*erm 5

可以通过向NSArray实例发送'count'来确定大小,并且可以通过NSLog()打印到控制台,例如:

NSArray * array = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSLog(@"array size is %d", [array count]);
Run Code Online (Sandbox Code Playgroud)