【问题标题】:Maximum amount of objects in NSArrayNSArray 中的最大对象数量
【发布时间】:2010-01-28 15:08:17
【问题描述】:

我可以在我的 NSArray 中放置的最大对象数量是多少?

【问题讨论】:

    标签: cocoa nsarray


    【解决方案1】:

    你有试过吗? ;)

    NSMutableArray * a = [[NSMutableArray alloc] init];
    NSUInteger i = 0;
    @try {
      while (1) {
         [a addObject:@"hi"];
         i++;
      }
    } @catch (NSException * e) {
      NSLog(@"added %llu elements", i);
    }
    

    【讨论】:

    • Delong 在尝试您的想法并找出大小限制时,该应用程序崩溃并出现错误,因为程序收到信号:“0”。数据格式化程序暂时不可用,将在“继续”后重试。 (加载共享库“/Developer/usr/lib/libXcodeDebuggerSupport.dylib”时出现未知错误)
    • 您的内存不足。只需记录我在每次迭代中的状态并让它崩溃,最后一个日志会告诉您可以获得多少。顺便说一句,您的测试告诉您大小仅限于内存。
    【解决方案2】:

    NSArray initWithCapacity 方法接受一个无符号整数作为参数。因此,无论您的平台上的 unsigned int 的最大值是多少,都可能是理论上的限制。但是,实际限制更可能取决于您可用的内存量。

    【讨论】:

    • NSUInteger,而不是 unsigned int。在 64 位架构上,unsigned int 仍然是 4 字节,而 NSUInteger(自 Leopard 以来 NSArray 使用的)为 8。
    • 假设最大对象数 NSUIntegerMax 是不正确的。正如 jsmp 所指出的,NSArray 使用 NSNotFound。 NSNotFound 定义为小于 NSUInteger 的 NSIntegerMax。这意味着最大对象数是 NSIntegerMax-1。我会按照 Dave Delong 的建议对此进行测试,但如果内存用完了!
    • 希望您有足够的 RAM 来容纳 180 倍于 Lt. Cmd 的信息。数据! wolframalpha.com/input/?dataset=&i=(1*(2%5E64)+%2B+8+%2B+8)+字节
    【解决方案3】:

    在大多数情况下,关于编程结构的上限等:
    “如果你不得不问,你可能做错了” - TheDailyWTF.com

    【讨论】:

      【解决方案4】:

      可能超出您的 RAM 可以处理的范围。

      【讨论】:

        【解决方案5】:

        NSNotFound 定义为 NSIntegerMax(如果您在 32 位或 64 位系统上,此值会发生变化)

        NSNotFound也是你做a时得到的结果

        [nsarray indexOfObject:obj]

        没有找到任何对象。

        如果你没有用完空间/内存,我会说这将是你的极限。

        http://developer.apple.com/library/mac/#documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Constants/Reference/reference.html

        【讨论】:

          【解决方案6】:

          NSArray 是指向其他对象的指针的容器。其最大容量由NSUInteger 定义(在可用操作系统的最新版本上):

          在构建 32 位应用程序时, NSUInteger 是 32 位无符号数 整数。一个 64 位应用程序处理 NSUInteger 作为 64 位无符号数 整数

          因此,无论给定设备上 NSUInteger 的大小是多少,它都可以包含的对象指针的最大数量。然而,正如 Eimantas 在他的回答中提到的那样,这与“它可以容纳多少个对象”不同,因为这取决于可用内存。例如,在给定时刻,您可能没有足够的可用 RAM 来分配具有 60 亿个插槽的数组...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多