Нет, они не будут вести себя одинаково. init
создаст массив с некоторой неизвестной, но, скорее всего, ненулевой емкостью - независимо от того, что авторы решили, для большинства ситуаций было приемлемым значением по умолчанию. initWithCapacity:0
будет запрашивать массив без выделенного пространства. Это означает, что до реализации NSMutableArray
: она может не допускать емкости 0 и вести себя точно так же, как init
, или она может не выделять что-либо сразу и вместо этого выделять некоторую сумму (такую же, как init
, возможно, или, может быть, нет), когда вам это сначала нужно.
То, что будет работать «лучше», полностью зависит от того, как вы ожидаете использовать массив. -init
говорит: «У меня нет никаких ожиданий от этого массива; я либо буду добавлять и удалять из него много, либо он, скорее всего, будет довольно маленьким». -initWithCapacity:
говорит: «Я ожидаю, что в обозримом будущем в этом массиве будет не больше, чем столько элементов».
О единственном месте, где я ожидал бы, что initWithCapacity:0
будет разумным, это если вы создаете массив, который вы не собираетесь заполнять чем-либо в течение достаточно длительного периода времени.
Обратите внимание, что здесь применяется стандартное предупреждение о производительности: это, вероятно, не проблема, если вы не профилируете и не определите, что это так. Я не могу себе представить ситуацию (за исключением тысяч и тысяч NSMutableArray
объектов), где разница между этими двумя будет существенной.