Pergunta

Estou tendo um monte de problemas com NSDate objetos sendo prematuramente desalocada. Eu suspeito que os problemas podem estar relacionados com a maneira que eu lidar com os objetos retornados de métodos de conveniência NSDate. I pensar que a minha declaração de propriedade VerData na classe JKShow deve ser "manter", mas alterá-lo para atribuir ou cópia parece não ter efeito sobre a questão.

JKShow *show; 
NSDate *date;
NSMutableArray *list = [[NSMutableArray alloc] init];

// Show 1
show = [[JKShow alloc] init];
//...
date = [gregorian dateFromComponents:dateComponents];
show.showDate = date;
[list addObject:[show autorelease]];

// Show 2
show = [[JKShow alloc] init];
//...
date = [gregorian dateFromComponents:dateComponents];
show.showDate = date;
[list addObject:[show autorelease]];

Atualização

O problema não estava no código copiado aqui. No meu método JKShow init eu não estava mantendo a data retornado do método NSDate conveniência. Obrigado por sua ajuda, todos.

Foi útil?

Solução 4

Eu percebi isso, obrigado por toda sua ajuda, mas o problema era fora do código eu postei aqui. Eu não estava mantendo a NSDate eu criei em meu método init. Infelizmente o acidente não ocorreu até depois que eu tinha criado os dois novos objetos NSDate, então eu estava totalmente latindo para a árvore errada.

Outras dicas

A data retornou de dateFromComponents deve ser na piscina disparo automático, então você está correto que sua propriedade Mostrar data deve ser "manter". Na verdade, deveria ser assim mesmo (a menos que você quer especificamente "cópia").

A partir do código que você tem mostrado parece que você está dando a propriedade de seu show objeto inteiramente à lista (como você está disparo automático definição sobre eles como você adicioná-los). Você está dizendo que os objetos data estão sendo desalocada antes do show objetos estão saindo da lista (ou a lista está sendo desalocada)?

Além disso, você está usando propriedades sintetizados, ou você está escrevendo-los à mão? Neste último caso, qual é o seu método de propriedade setShowDate como?

Você também pode tentar registrar o retainCount do objeto data em lugares diferentes (embora eu sempre acho que o disparo automático realmente complica isso).

Se VerData é uma reter propriedade que deve ser suficiente, dado o código que você postou. Outra coisa (provavelmente na implementação do JKShow) pode não estar correto.

Se você quiser descobrir o que está acontecendo, você pode usar Instruments ver examinar os objetos vida útil. Você precisa executá-lo com o conjunto de ferramentas de alocação de lembrar mantém e lançamentos. Por padrão, ele está configurado dessa forma, se você executar a ferramenta desempenho vazamentos.

Quando você executa Instruments assim ele irá gravar todos os vãos objeto de vida, eo registo de chamadas para cada reter e liberar emitido contra eles. Se você olhar através dos objetos, encontrar uma das suas datas, e olhar para toda a retém e liberta você deve ser capaz de determinar onde a liberação espúria está acontecendo.

O código que você mostrou não tem problemas de liberação prematura. Na verdade, ele vai vazar a matriz e tudo nele, porque ele não liberar o array.

Você está funcionando com o coletor de lixo ligado?

é list uma variável de instância ou variável estática, ou é uma variável local?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top