Сколько раз я освобождаю выделенный или сохраненный объект? - PullRequest
6 голосов
/ 17 сентября 2010

Я делаю игру для iPhone.Я хочу освободить все объекты, которые были выделены или сохранены.В функции dealloc я освобождаю все такие объекты, но потом я понял, что иногда заканчиваю тем, что освобождаю объекты, когда они еще не распределены.Поэтому я решил, что мне нужно проверить, является ли значение retainCount больше нуля или нет, прежде чем я его отпущу.

Мой вопрос:

Должен ли я просто проверить, больше ли retainCountчем ноль, а затем отпустите его?

if([bg retainCount]!=0)
{
  [bg release];
}

или

Должен ли я выпустить его столько раз, сколько его retainCount

while([bg retainCount]!=0)
{
  [bg release];
}

Спасибо за вашу помощь!

Ответы [ 2 ]

77 голосов
/ 17 сентября 2010

Не используйте -retainCount.

Абсолютный счет сохранения объекта не имеет смысла.

Вы должны вызывать release ровно столько раз, сколько вы вызывали сохранение объекта,Не меньше (если вам не нравятся утечки) и, конечно же, больше нет (если вам не нравятся сбои).

См. Рекомендации по управлению памятью для получения полной информации.

2 голосов
/ 17 сентября 2010

Авто-релиз делает retainCount бессмысленным. Следите за сохранением и принадлежат ли вы объекту. Изучите и запомните эти правила: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH

...