Чем отличаются эти инициализации NSMutableArray? - PullRequest
2 голосов
/ 02 октября 2009

В ветке моего кода я ранее использовал это

NSMutableArray *array1 = [[NSMutableArray alloc] init];

Приведенный выше массив используется для заполнения UITableVew.

Просто потому, что я переключился на следующее:

NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:0]

Я не внес никаких других изменений в свой код), и мое приложение вылетает при попытке прокрутить список в UITableView.

Похоже, мой массив инициализирован неправильно. Может кто-нибудь объяснить, почему это произошло? Разве два метода не идентичны по отношению к тому, как распределяется основное пространство памяти?

1 Ответ

2 голосов
/ 02 октября 2009

Ваша вторая строка кода не сохраняет NSArray, что вызывает сбой. Вам нужно будет позвонить [array1 retain] после того, как вы позвоните arrayWithCapacity:.

В этом посте довольно много полезной информации: Понимание подсчета ссылок с помощью Cocoa / Objective C

В общем, если вы вызываете метод класса, который не начинается с «new» или «init» (например, arrayWithCapacity), вы обычно можете предположить, что возвращаемый объект будет автоматически освобожден.

...