Насколько имеет значение, если я создаю NSMutableArray с capacity=3 вместо capacity=50?

Панель расширяется до промежутка (или отделение), с он доволен в нем. Заполнитель просто, что, заполнитель это заменяется тем, что Вы вставляете его.

10
задан 20 August 2009 в 21:12
поделиться

3 ответа

initWithCapacity приведет к тому, что NSMutableArray предварительно выделит пространство для этого количества элементов.

Размещение дополнительных данных в NSMutableArray сверх этой емкости заставит NSMutableArray перераспределить свою базовую память. Это перераспределение также потребует копирования всего массива из старого (меньшего) выделения в новое (большее). Таким образом, слишком маленькое число снижает производительность, но не больше единицы.

Указание емкости, превышающей фактически используемую, приводит к потере памяти, поскольку будет выделена память для элементов, которые никогда не будут использоваться .

Я бы порекомендовал, если вы знаете, что размер вашего массива обычно не превышает N элементов, вызовите initWithCapacity: N .

8
ответ дан 3 December 2019 в 21:22
поделиться

Есть теоретический ответ и практический ответ. Теоретически установка большей емкости может изменить стратегию выделения и хранения для массива (хотя внутренняя структура, называемая «NSArray», немного сложнее).

С практической точки зрения, массив будет перераспределяться по мере необходимости, и с числами, о которых вы говорите, я сомневаюсь, что будет какая-либо разница. Я мог бы сделать arrayWithCapacity, если бы знал, что помещу тысячи и тысячи элементов. 3 vs. 50 по сути бессмысленны.

Лучшее использование withCapacity, с моей точки зрения, - это просто предоставление очевидной ловушки, на которую можно повесить ваши предположения, чтобы вы могли (например) иметь документацию в коде того, что вы может позже захочется утверждать. но это ни в коем случае не требуется.

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

3
ответ дан 3 December 2019 в 21:22
поделиться

Это не имеет большого значения, если вы не говорите о чрезмерном повторении или огромных массивах. Не стоит пытаться оптимизировать, пока это не станет настоящим узким местом.

РЕДАКТИРОВАТЬ: Я хотел бы добавить цитату Дональда Кнута:

Преждевременная оптимизация - корень всех зол.

6
ответ дан 3 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: