【问题标题】:Size of an NSArrayNSArray 的大小
【发布时间】:2010-03-24 22:57:27
【问题描述】:

如何获取NSArray 的大小并使用NSLog 在控制台中打印?

【问题讨论】:

标签: ios objective-c arrays


【解决方案1】:
int size = [array count];
NSLog(@"there are %d objects in the array", size);

【讨论】:

  • 技术上应该是NSUInteger size = ...,但无论如何+1。 :)
  • 无论如何,您都必须将其转换为 printf 支持的类型才能打印,因为 printf 没有 NS[U]Integer 的格式说明符。
  • @Chuck 文档说分别使用%ld%lu 来表示NSIntegerNSUIntegerdeveloper.apple.com/mac/library/documentation/cocoa/conceptual/…
  • @Chuck 从技术上讲是 longunsigned long 的演员,但这是推荐的 :)
【解决方案2】:

另一个答案的答案:

您无法获得以兆字节为单位的数组大小,至少在不做一些棘手的、不受支持的* C voodoo 的情况下是这样。 NSArray 是一个类簇,这意味着我们不知道它是如何在内部实现的。确实,使用的实现可以change depending on how many items are in the array。此外,数组的大小与数组引用的对象的大小不相交,因为这些对象位于堆的其他位置。即使是保存对象指针的结构在技术上也不是数组的“一部分”,因为它不一定是堆上实际的NSArray 旁边的calloc

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

NSLog(@"Size: %d", sizeof(NSArray));

打印:

2010-03-24 20:08:33.334 EmptyFoundation[90062:a0f] Size: 4

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

*“不支持”我的意思是“不推荐”、“深入研究类集群的内在奥秘”和“未记录的私有 API,如果它存在的话”

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      查看这篇文章以了解您的数组大小问题

      Length of an Array in Objective C

      使用 NSLog 写入控制台...

      NSLog(@"The array size is %@", arraySize);
      

      【讨论】:

        【解决方案5】:

        在 Swift 4 中

        让 a = ["a","b"]

        a.count //2

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多