Pergunta

estou usando NSKeyedUnarchiver unarchiveObjectWithFile: para ler nos dados do aplicativo. Ao correr com vazamentos em instrumentos, me disseram que o seguinte produz um vazamento:

{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *archivePath = [[NSString alloc]initWithFormat:@"%@/Config.archive", documentsDirectory];

    //Following line produces memory leak
    applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];

    [archivePath release];

    if( applicationConfig == nil )
    {
        applicationConfig = [[Config alloc]init];
    }
    else
    {
        [applicationConfig retain];
    }
}

A linha:

applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];

está produzindo um vazamento de memória de 32 bytes. ApplicationConfig é uma variável de instância. Minha função initWithCode simplesmente faz:

- (id)initWithCoder:(NSCoder *)coder {
    if( self = [super init] )
    {
                //NSMutableArray
        accounts = [[coder decodeObjectForKey:@"Accounts"] retain];
        //Int
                activeAccount = [coder decodeIntForKey:@"ActiveAccount"];       
    }
    return self;
}

Qualquer ideia de por que

applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];

está produzindo um vazamento?

Foi útil?

Solução

Meu palpite é que seu vazamento de memória é causado por esta linha:

[applicationConfig retain];

ou esta linha:

accounts = [[coder decodeObjectForKey:@"Accounts"] retain];

A memória está sendo alocado dentro unarchiveObjectWithFile:, mas o vazamento será causado por uma retenção extra no objeto. Certifique -se de estar lançando applicationConfig adequadamente.

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