Как освободить объект из массива? - PullRequest
0 голосов
/ 11 января 2011

В настоящее время я работаю над демонстрационным приложением, поэтому я был немного неаккуратен, как добиться цели, однако я запустил «Построить и проанализировать», чтобы увидеть, сколько утечек я получаю,… ну, и их много.

Источник проблемы в том, что у меня есть NSMutableArray, и я добавляю в него несколько объектов:

NSMutableArray *arr = [[NSMutableArray alloc] init];
[arr addObject:[[MyObject alloc] initWithText:@"Option1"]];
// I have like 100 lines like that and 100 complains

Теперь xcode жалуется на потенциальную утечку.

Может кто-нибудь дать мне совет, как с этим справиться?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Проблема в том, что вы выделяете экземпляр MyObject, который вы обязаны выпустить.Когда вы передаете его в массив, массив также сохраняет объект, поэтому теперь вы и массив должны его освободить.Вы можете просто autorelease объект, и массив будет сохранять его, пока вы не удалите объект из массива или не уничтожите сам массив.

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"]] autorelease];
2 голосов
/ 11 января 2011

Заменить

[arr addObject:[[MyObject alloc] initWithText:@"Option1"]];

с

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"] autorelease]];

Большинство коллекций (массивов, словарей) имеют добавленные к ним объекты. И, поскольку вы отправили +alloc на MyObject, у вас также есть объект, который только что был создан. Как говорят правила управления памятью, вы несете ответственность за отказ от владения объектами , которыми вы владеете. Отправка -autorelease недавно созданному объекту сделает это.

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