Сколько раз я освобождаю выделенный или сохраненный объект?
Я делаю игру для 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