Панель расширяется до промежутка (или отделение), с он доволен в нем. Заполнитель просто, что, заполнитель это заменяется тем, что Вы вставляете его.
initWithCapacity
приведет к тому, что NSMutableArray
предварительно выделит пространство для этого количества элементов.
Размещение дополнительных данных в NSMutableArray
сверх этой емкости заставит NSMutableArray
перераспределить свою базовую память. Это перераспределение также потребует копирования всего массива из старого (меньшего) выделения в новое (большее). Таким образом, слишком маленькое число снижает производительность, но не больше единицы.
Указание емкости, превышающей фактически используемую, приводит к потере памяти, поскольку будет выделена память для элементов, которые никогда не будут использоваться .
Я бы порекомендовал, если вы знаете, что размер вашего массива обычно не превышает N элементов, вызовите initWithCapacity: N
.
Есть теоретический ответ и практический ответ. Теоретически установка большей емкости может изменить стратегию выделения и хранения для массива (хотя внутренняя структура, называемая «NSArray», немного сложнее).
С практической точки зрения, массив будет перераспределяться по мере необходимости, и с числами, о которых вы говорите, я сомневаюсь, что будет какая-либо разница. Я мог бы сделать arrayWithCapacity, если бы знал, что помещу тысячи и тысячи элементов. 3 vs. 50 по сути бессмысленны.
Лучшее использование withCapacity, с моей точки зрения, - это просто предоставление очевидной ловушки, на которую можно повесить ваши предположения, чтобы вы могли (например) иметь документацию в коде того, что вы может позже захочется утверждать. но это ни в коем случае не требуется.
С практической точки зрения, лучшее использование вашего времени - это даже не думать об этой проблеме.
Это не имеет большого значения, если вы не говорите о чрезмерном повторении или огромных массивах. Не стоит пытаться оптимизировать, пока это не станет настоящим узким местом.
РЕДАКТИРОВАТЬ: Я хотел бы добавить цитату Дональда Кнута:
Преждевременная оптимизация - корень всех зол.