4

我很难理解 Objective-C 的 NSMutableArray 类中的方法。我使用这个类的 arrayWithCapacity: 静态方法创建了一个数组,就像这样:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity: 10];

然后我尝试访问数组中的一个元素:

id myVariable = myArray[5];

这就是我得到的:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds for empty array'

为什么会这样?我对方法描述有什么误解吗?

谢谢您的帮助。

4

2 回答 2

16

UsingarrayWithCapacity:10意味着在内部,数组将自己设置为容纳 10 个对象。但它仍然没有对象。

通常,会创建一个空数组并设置为仅保存几个对象。随着您添加越来越多的对象,需要调整内部数组的大小。这意味着需要分配更多内存,然后将旧对象移动到新内存,并清理旧内存。

如果您知道该数组将保存 X 个对象,则使用arrayWithCapacity该数组可以提高效率。您仍然可以添加更多对象,但效率会降低。

除了所有这些之外,您无法访问超出当前计数的数组索引。由于最初计数为 0,因此您无法访问任何对象。您需要先添加对象,然后才能访问它们。

于 2014-03-14T04:20:02.093 回答
-3

您已初始化数组,例如:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity: 10];

这意味着您最多可以将 10 个对象添加到数组中。您正在访问数组的第六个对象:

id myVariable = myArray[5];

我不知道您如何将对象添加到数组中,但从错误来看,您的数组似乎没有对象,并且您正在尝试访问空数组的第六个索引。尝试先添加一些对象。

于 2014-03-14T04:24:06.287 回答