Вы создали объект с alloc
, и вы отвечаете за память этого объекта . Тот факт, что initWithCapacity:
может возвратить часть памяти, отличную от той, которая первоначально пришла от вызова alloc
, не меняет этого.
Методы инициализатора в Какао могут освобождать экземпляр, который они передают, и создавать новый для возврата. В этом случае для этого initWithCapacity:
необходимо сделать это, так как вы на самом деле просите его зарезервировать больше памяти, о которой alloc
не знал и не мог выделить.
Это причина того, что alloc
и init...
всегда должны быть в паре: [[NSMutableArray alloc] initWithCapacity:10]
Что касается initWithCapacity:
, в частности, bbum (кто знает, о чем говорит - инженер Apple) говорит, что это обычно не нужно . Это не мешает вам расширять массив до указанного размера. Все, что он делает, потенциально позволяет массиву выполнить некоторую начальную оптимизацию *; если вы не измерили и это существенно изменило ситуацию, это, вероятно, не нужно.
* См. Objective-c NSArray init в сравнении с initWithCapacity: 0