Когда и зачем освобождать объект - PullRequest
0 голосов
/ 31 июля 2009

Я использую эти строки в моем коде

NSMutableArray * NewsFeedArray;
NewsFeedArray = [[[NSMutableArray alloc]init]retain];

Где мне выпустить этот NSMutableArray, и почему я хочу выпустить этот объект? В моем проекте я освобождаю объект в моем методе dealloc, но для этого требуется больше времени.

Может кто-нибудь объяснить это?

Ответы [ 3 ]

3 голосов
/ 31 июля 2009
NewsFeedArray =[[[NSMutableArray alloc] init] retain];

Эта строка кода фактически увеличивает количество сохраняемых объектов до 2. Возможно, именно поэтому вы испытываете, что объект не был полностью освобожден, когда вы ожидаете этого.

0 голосов
/ 31 июля 2009

Вам нужно что-то вроде этого при запуске (возможно, в вашем init методе):

NSMutableArray* news = [[NSMutableArray alloc] initWithCapacity:10];

Обратите внимание, что вам не нужно его сохранять.

Чтобы добавить материал:

RandomObject* obj = [[RandomObject alloc] init];
// set properties
[news addObject:obj];
[obj release];

Вы можете освободить новый объект, так как добавление его в массив увеличило количество ссылок.

И, наконец, вы добавили в свой метод dealloc следующее:

[news release];

Освобождение массива автоматически освободит каждый объект, который он содержит.

0 голосов
/ 31 июля 2009

Освободите объекты, добавленные вами в NewsFeedArray, сразу после их добавления. Тот факт, что вы добавляете их в массив, увеличивает их количество на единицу. Массив «владеет» ими, и когда вы освобождаете массив, все сохраненные в нем объекты уменьшают количество сохраняемых данных на единицу (обычно их тоже освобождают).

...