Подтвердить что ты не робот

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, это не работает нормально, почему???

4b9b3361

Ответ 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 Что вы хотите сделать??? В чем проблема?

Вы можете попытаться создать массив, а затем инициализировать его нулевыми элементами и после этого вставить в него!!! Я думаю, что это сработает!!!