4

Objective-C の NSMutableArray クラスのメソッドを理解するのに苦労しています。次のように、このクラスの arrayWithCapacity: static メソッドを使用して配列を作成しました。

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 個のオブジェクトを保持するように設定されることを意味します。しかし、まだオブジェクトがありません。

通常、空の配列が作成され、いくつかのオブジェクトを保持するように設定されます。オブジェクトを追加するにつれて、内部配列のサイズを変更する必要があります。これは、より多くのメモリを malloc する必要があることを意味し、古いオブジェクトは新しいメモリに移動され、古いメモリはクリーンアップされます。

配列が X 個のオブジェクトを保持することがわかっている場合は、 を使用arrayWithCapacityすると配列をより効率的に使用できます。オブジェクトをさらに追加することはできますが、効率は失われます。

これらすべてを除けば、現在の数を超えて配列インデックスにアクセスすることはできません。最初はカウントが 0 であるため、どのオブジェクトにもアクセスできません。オブジェクトにアクセスする前に、オブジェクトを追加する必要があります。

于 2014-03-14T04:20:02.093 に答える