Pergunta

Considere o método a seguir, onde eu construo uma string e a devolva. Eu gostaria de liberar os blocos de construção da string, mas a string é baseada em valores que não existem mais. O que agora?

Estou vazando memória e, se sim, como posso corrigi -la?

- (NSString) getMiddahInEnglish:(int)day{
NSArray *middah = [[NSArray alloc] initWithObjects:@"Chesed", @"Gevurah", @"Tiferes", @"Netzach", @"Hod", @"Yesod", @"Malchus"];
NSString *firstPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day% 7)-1]];
NSString *secondPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day / 7)]];

NSString *middahStr = [NSString string@"%@ She'bi@%", firstPartOfMiddah, secondPartOfMiddah];

[middah release];
[firstPartOfMiddah release];
[secondPartOfMiddah release];

return middahStr;

}

No final do método, a string de retorno, middahStr não foi lançado. Isso é um problema? Estou vazando memória?

Foi útil?

Solução

Muito pelo contrário: você é muito liberado.

middah você aloce e inicia. Então você libera. Tudo está bem.

firstPartOfMiddah e secondPartOfMiddah, você chama um método de conveniência "Stringwith" NSString. Isso é equivalente a invocar aloc, init, e autorlease. A sua liberação é um erro, pois eles são essencialmente dados ao AutoRelease para lançar mais tarde.

middahStr Você chama o método de conveniência, mas devolve -o. Tudo está bem. Ele será lançado posteriormente pelo Pool AutorElease.

Regra geral (tenho certeza de que há muitas exceções): se você não o alocá -lo, não o solte.

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