Quantas vezes libero um objeto alocado ou retido?

Estou fazendo um jogo para iPhone. Quero liberar todos os objetos que foram alocados ou retidos. Nodealloc function Estou liberando todos esses objetos, mas percebi que algumas vezes acabo liberando objetos quando eles ainda não foram alocados. Então achei que precisava verificar se éretainCount é maior que zero ou não antes de liberá-lo.

Minha pergunta é:

Acabei de verificar se oretainCount é maior que zero e depois libera?

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

ou

Devo liberá-lo quantas vezes for necessárioretainCount

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

Obrigado pela ajuda!

questionAnswers(2)

yourAnswerToTheQuestion