Первый создает изменяемый массив без указания емкости. Это заставляет массив увеличиваться при добавлении элементов. Внутренне это, вероятно, сильно оптимизировано, чтобы происходить «порциями», но все равно необходимо увеличивать массив и выделять больше места при добавлении элементов.
Второй дает массиву подсказку (вам, вероятно, понадобится «так много» места), чтобы избежать накладных расходов на увеличение массива при добавлении известного количества объектов. Конечно, он все равно будет увеличиваться при необходимости (как если бы вы не указали емкость). Вы должны использовать этот подход, если вы уже знаете счет заранее. Это быстрее с большим количеством.
Это имеет недостаток, если вы не измеряли до оптимизации, однако: если вы создаете изменяемый массив с очень высокой емкостью, но не всегда используете эту емкость, вы несете штраф за то, что выделяете все это пространство впустую.
Кроме того, вы не выполняете автоматический выпуск B (как вы прокомментировали), потому что вы не создали изменяемый массив с помощью init - вы использовали удобный метод, который сделал это сам, что означает, что вы не несете ответственности за его освобождение. Как я уже упоминал в комментарии к другому ответу на ваш вопрос, вы также можете создать массив с помощью:
[[NSMutableArray alloc] initWithCapacity:capacity];
... затем отпустите, когда будете готовы. Это дает вам больший контроль над использованием памяти, чем использование пула автоматического выпуска, что является важным фактором на платформе iPhone.
Помните, однако: сначала измерьте, а затем оптимизируйте при необходимости.