NSMutableArray
не является разреженным массивом;это не позволяет пустые слоты, которые могут быть заполнены позже.initWithCapacity:
просто намекает массиву, что он будет заполнен до определенной суммы;на практике это обычно не требуется, и, если вы точно не знаете, сколько элементов вы собираетесь поместить в массив, не называйте его (просто используйте init
).
Изменяемый массив будетдовольно эффективно увеличиваются в размерах при добавлении объектов.
Если вам нужна структура данных, которая поддерживает «дыры», то либо используйте что-то другое, либо поместите объект-заполнитель в слоты, которые должны быть пустыми.
Т.е., если вы хотите массив с 10 слотами, вы можете сделать:
NSMutableArray *a = [NSMutableArray array];
for(int i = 0; i<10; i++) [a addObject: [NSNull null]];
Затем вы можете проверить, найден ли полученный объект isEqual: [NSNull null]
, чтобы узнать, пустой слот или нет.И вы можете использовать replaceObjectAtIndex:withObject:
, чтобы прикрепить объект к определенному индексу.
Или вы можете использовать другую структуру данных;например, словарь с индексами в качестве ключей.