Сколько раз я освобождаю выделенный или сохраненный объект?

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

Мой вопрос:

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

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

или же

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

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

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам