【发布时间】:2010-01-28 15:08:17
【问题描述】:
我可以在我的 NSArray 中放置的最大对象数量是多少?
【问题讨论】:
我可以在我的 NSArray 中放置的最大对象数量是多少?
【问题讨论】:
你有试过吗? ;)
NSMutableArray * a = [[NSMutableArray alloc] init];
NSUInteger i = 0;
@try {
while (1) {
[a addObject:@"hi"];
i++;
}
} @catch (NSException * e) {
NSLog(@"added %llu elements", i);
}
【讨论】:
NSArray initWithCapacity 方法接受一个无符号整数作为参数。因此,无论您的平台上的 unsigned int 的最大值是多少,都可能是理论上的限制。但是,实际限制更可能取决于您可用的内存量。
【讨论】:
NSUInteger,而不是 unsigned int。在 64 位架构上,unsigned int 仍然是 4 字节,而 NSUInteger(自 Leopard 以来 NSArray 使用的)为 8。
在大多数情况下,关于编程结构的上限等:
“如果你不得不问,你可能做错了” - TheDailyWTF.com
【讨论】:
可能超出您的 RAM 可以处理的范围。
【讨论】:
NSNotFound 定义为 NSIntegerMax(如果您在 32 位或 64 位系统上,此值会发生变化)
NSNotFound也是你做a时得到的结果
[nsarray indexOfObject:obj]
没有找到任何对象。
如果你没有用完空间/内存,我会说这将是你的极限。
【讨论】:
NSArray 是指向其他对象的指针的容器。其最大容量由NSUInteger 定义(在可用操作系统的最新版本上):
在构建 32 位应用程序时, NSUInteger 是 32 位无符号数 整数。一个 64 位应用程序处理 NSUInteger 作为 64 位无符号数 整数
因此,无论给定设备上 NSUInteger 的大小是多少,它都可以包含的对象指针的最大数量。然而,正如 Eimantas 在他的回答中提到的那样,这与“它可以容纳多少个对象”不同,因为这取决于可用内存。例如,在给定时刻,您可能没有足够的可用 RAM 来分配具有 60 亿个插槽的数组...
【讨论】: