2016-06-15 4 views
1

я следующий код:Как получить емкость NSMutableArray?

[[NSMutableArray alloc] initWithCapacity:slidingValue] 

Однако, если я пытаюсь получить размер его с помощью count непосредственно после вышеуказанной инициализации, то он вернет 0. Там нет добавления объекта в него еще хотя.

Могу ли я получить его?

+0

'NSMutableArray' не имеет начального фиксированного размера. Он растет, когда вы добавляете элементы. Думаю, что 'capacity' в' initWithCapacity: 'просто подсказка для производительности. См. Документы: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/#//apple_ref/occ/instm/NSMutableArray/initWithCapacity: –

+0

Хм ... Мне интересно почему вам нужна способность NSMutaleArray? Это похоже на проблему XY. – kukushi

+0

Если у вас есть slideValue, который вы задали как емкость, то почему вам нужно то же самое от массива? вы можете использовать slideValue, который вы уже присвоили массиву. – Vickyexpert

ответ

1

Вам не нужно вместимость. Это оптимизация, и в зависимости от того, какую большую емкость вы укажете и какой внутренний алгоритм NSArray выбирает, на самом деле можно игнорировать. Просто добавьте объекты, когда вы их получите, используя - addObject: или - insertObject:. В отличие от CFArray, емкость NSArray не является жестким пределом. Это всего лишь предложение.

Если вы получаете ваши объекты в случайном порядке (но с порядковым номером), вы можете создать массив и заполнить его с [NSNull null] объектов с помощью - addObject:, а затем заменить NSNull с реальным объектом, как вы его получите. Но последнее редко бывает необходимо.

Примечание:

The - initWithCapacity: метод создает пустой массив с намеком, как большой массив может достигать до перераспределения памяти. Счет увеличивается, когда вы на самом деле -addObject: к массиву.

Смежные вопросы