Por que meu dicionário lançado em um NSArray?

votos
1

Eu tenho um tableviewcontroller que armazena objetos do dicionário em uma matriz, quando uma linha é selecionado eu empurrar um novo controlador de vista sobre a pilha de navegação e eu passar um objeto do dicionário da matriz em sua initializer, o objeto de dicionário será mantido em uma propriedade do novo controlador de vista. Quando eu voltar para o meu tableviewcontroller eu liberar o objeto de dicionário no dealloc do controlador de vista. Mas quando eu rolar para baixo / back na minha tableviewcontroller, o dicionário que foi passado para o controlador de vista é desalocada na matriz do tableviewcontroller e as falhas do programa com a mensagem:

BreakdanceSource [1351: 607] * Encerrando aplicativo devido a exceção não capturada 'NSUnknownKeyException', razão: '[valueForUndefinedKey:]:. Esta classe não é valor de chave de codificação compatível para o título tecla'

Quando eu remover o [liberação dicionário] da função dealloc do controlador de vista, o programa funciona e não cair! É estranho, porque eu pensei que a matriz também mantém a posse dele é objetos de modo que o dicionário não deveria ter sido desalocada.

Por que não pode liberar o objeto de dicionário no meu controlador de vista? (Eu removi [a liberação dicionário] agora no dealloc eo programa funciona, mas eu não vou ter um vazamento de memória?)

Eu tentei isso, até agora !:

imageshack.us/photo/my-images/813/screenshot20110926at610.png Eu usei a ferramenta zumbis e este é o meu resultado! O que eu não entendo é que antes do dealloc do meu controlador de vista a manter a contagem é 1, que deveria ter sido 2. Porque a matriz na tableviewcontroller deve possuir o dicionário e eu tenho uma propriedade em meu controlador de vista que é @ propriedade (manter) NSDictionary * mídia. Eu não sei onde meu dicionário fica liberado, porque agora ele só fica liberado em dealloc do controlador de visualização

Eu também tentei mudar o @property propriedade (manter) para @property NSDictionary * media então eu uso de mídia = [infoDictionary reter] e não falhar .. que minha propriedade (manter) não retê-lo?

Publicado 25/09/2011 em 20:23
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Sim, você deve estar liberando esse objeto em outro lugar, tente executar NSZombie para confirmar isso.

Respondeu 25/09/2011 em 20:35
fonte usuário

votos
1

Sim NSMutableArrayaumenta a contagem de manter um objeto que é adicionado a ele e, correspondentemente, diminui a contagem de reter quando o NSMutableArrayé liberada. Isso não impede outra coisa do diminuindo a contagem de reter a ponto de uma liberação objetos. Então, deve haver outro lançamento / disparo automático do objeto.

Use a ferramenta de Alocação Instruments, definir a opção de contagem de reter, encontrar o objeto e você verá onde a liberação adicional está acontecendo. Veja este SO responder para obter informações sobre a utilização de instrumentos dessa maneira.

Respondeu 25/09/2011 em 20:30
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more