Описание метода NSMutableArray initWithCapacity и управление памятью - PullRequest
1 голос
/ 27 июля 2011

Речь идет о методе экземпляра NSMutableArray "initWithCapacity".

Из документации возвращаемое значение описывается так:

Return Value
An array initialized with enough memory to hold numItems objects.
The returned object might be different than the original receiver.

Кажется, чтоопечатка в «отличается от», я думаю, это должно быть «отличается от».А также, если возвращаемый объект действительно отличается от оригинала, нужно ли нам беспокоиться об освобождении памяти, связанной с исходным объектом?

Надеюсь, что кто-то, знающий об этом, может помочь ...

http://developer.apple.com/library/mac/#documentation/cocoa/reference/foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/occ/cl/NSMutableArray

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Вы создали объект с alloc, и вы отвечаете за память этого объекта . Тот факт, что initWithCapacity: может возвратить часть памяти, отличную от той, которая первоначально пришла от вызова alloc, не меняет этого.

Методы инициализатора в Какао могут освобождать экземпляр, который они передают, и создавать новый для возврата. В этом случае для этого initWithCapacity: необходимо сделать это, так как вы на самом деле просите его зарезервировать больше памяти, о которой alloc не знал и не мог выделить.

Это причина того, что alloc и init... всегда должны быть в паре: [[NSMutableArray alloc] initWithCapacity:10]

Что касается initWithCapacity:, в частности, bbum (кто знает, о чем говорит - инженер Apple) говорит, что это обычно не нужно . Это не мешает вам расширять массив до указанного размера. Все, что он делает, потенциально позволяет массиву выполнить некоторую начальную оптимизацию *; если вы не измерили и это существенно изменило ситуацию, это, вероятно, не нужно.


* См. Objective-c NSArray init в сравнении с initWithCapacity: 0

0 голосов
/ 27 июля 2011

Каждый раз, когда вы используете метод, содержащий слово alloc, вы несете ответственность за освобождение памяти.Например, если вы сделали следующее

NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity:10];
//Store data into the array here
//Once done you need to release the array
[myArray release];

- Отредактированный пост, потому что я хотел набрать alloc и использовал вместо него init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...