Релиз NSarray - PullRequest
       28

Релиз NSarray

2 голосов
/ 21 февраля 2010

Если я объявляю NSArray с alloc & retain в одном предложении, то должен ли я освобождать объект NSArray дважды (т.е. [arrayObject release] 2 раза)?

Ответы [ 4 ]

7 голосов
/ 21 февраля 2010

Если вы создаете NSArray с alloc и retain в одной строке, то вы, вероятно, делаете что-то не так.

Объекты alloc редактируются со счетом сохранения +1, поэтому нет необходимости также вызывать retain для него.

Чтобы ответить на ваш вопрос напрямую; да, вы должны release дважды. Один раз, потому что вы создали объект, и один раз, потому что вы retain его редактировали. Но я хотел бы спросить, почему вы должны сохранить это дополнительное время в первую очередь.

2 голосов
/ 23 февраля 2010

Вам не нужно сохранять его. Вы уже сохраняете - или вступаете во владение - объект, когда вы выделяете / инициализируете. Пересмотрите Руководство по программированию управления памятью для какао .

0 голосов
/ 21 февраля 2010

Если вы делаете

NSArray* arrayObject;
arrayObject = [[NSArray alloc] init];
arrayObject = [[NSArray alloc] init];
...

тогда это просто неправильный код. Последнее назначение будет охватывать старое, что вызывает утечку. Либо используйте 2 объекта и отпустите каждый из них один раз :

NSArray* arrayObject1, arrayObject2;
arrayObject1 = [[NSArray alloc] init];
arrayObject2 = [[NSArray alloc] init];
...
[arrayObject1 release];
[arrayObject2 release];

или отпустите объект до другой инициации.

NSArray* arrayObject;
arrayObject = [[NSArray alloc] init];
...
[arrayObject release];
arrayObject = [[NSArray alloc] init];
...
[arrayObject release];
0 голосов
/ 21 февраля 2010

Нет, вы должны освобождать объект для каждого выделения и каждого сохранения. (И все равно вы не можете выделить объект более 1 раза.)

...