IOS: NSMutableArray initWithCapacity
У меня такая ситуация.
array = [[NSMutableArray alloc] initWithCapacity:4]; //in viewDidLoad
if (index == 0){
[array insertObject:object atIndex:0];
}
if (index == 1){
[array insertObject:object atIndex:1];
}
if (index == 2){
[array insertObject:object atIndex:2];
}
if (index == 3){
[array insertObject:object atIndex:3];
}
но если я вставляю в порядок объект, то все это нормально, вместо этого, если я заполню массив в этом порядке: 0 и после 3, это не работает нормально, почему???
Ответы
Ответ 1
Вы не можете вставлять объект в индекс 3 в NSMutableArray
, даже если его емкость равна 4. Mutable array имеет столько доступных "ячеек", сколько есть в нем объектов. Если вы хотите иметь "пустые ячейки" в изменяемом массиве, вы должны использовать объекты [NSNull null]
. Это специальные объекты-заглушки, которые означают no-data-here.
NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < 4; ++i)
{
[array addObject:[NSNull null]];
}
[array replaceObjectAtIndex:0 withObject:object];
[array replaceObjectAtIndex:3 withObject:object];
Ответ 2
В стиле C int a[10]
создается массив размером 10, и вы можете получить доступ к любому индексу от 0
до 9
в любом порядке. Но это не относится к initWithCapacity
или arrayWithCapacity
. Это всего лишь намек на то, что базовая система может использовать для повышения производительности. Это означает, что вы не можете вставить из строя. Если у вас есть изменяемый массив размера n, тогда вы можете вставлять только из индекса 0
в n
, 0
в n-1
для существующих позиций и n
для вставки в конечную позицию. Таким образом, действительны 0, 1, 2, 3. Но 0, 3 или 1,2 порядка недействительны.
Ответ 3
Вы не можете вставить любой случайный индекс, если вы хотите это сделать, сначала инициализируйте свой массив нулевыми объектами, затем вызовите replaceObjectAtIndex.
Ответ 4
Вы не можете вставлять сначала, например, в индекс 0, а затем в индекс 2 вы должны вставить шаг по вставке стержня в 0,1,2,3,4,5....., n Что вы хотите сделать??? В чем проблема?
Вы можете попытаться создать массив, а затем инициализировать его нулевыми элементами и после этого вставить в него!!! Я думаю, что это сработает!!!