Сохраненные дочерние элементы — должны быть освобождены?

#objective-c #cocos2d-iphone

#objective-c #cocos2d-iphone

Вопрос:

Допустим, я получил свой CCSprite для player, а затем еще один CCSprite для панели работоспособности.

CCSprite работоспособности является дочерним элементом CCSprite игрока.

По определенным причинам я решил сохранить панель работоспособности, например

 [healthBarSprite retain];
  

Мой вопрос: поскольку я сохранил панель работоспособности, я должен запустить

 [healthBarSprite release];
  

В какой-то момент, верно?

Вот что: панель работоспособности сохраняется, а спрайт игрока — нет. Итак, единственное, что я выпускаю, это панель работоспособности?

Если спрайт игрока был фактически сохранен, после его освобождения также автоматически освобождается индикатор работоспособности или я должен сначала освободить его, а затем игрока?

Ответ №1:

Да, вы должны отправить освобождение на панель работоспособности. Вам не нужно беспокоиться о том, освобождает ли спрайт игрока панель работоспособности; если он ее освобождает, цель состоит в том, чтобы сбалансировать сохранение, которое он сделал внутри. Все, о чем вам нужно беспокоиться, это балансировка вызовов сохранения, которые вы сделали.

Для иллюстрации, очень вероятно, что спрайт проигрывателя сохраняет свои дочерние элементы по мере их добавления и освобождает их, когда они удаляются, но независимо от этого, это деталь реализации CCSprite. Он будет беспокоиться о балансировке вызовов сохранения, которые он сделал, а вы беспокоитесь о балансировке своих.