vazamento de memória no loadNibNamed?
-
22-07-2019 - |
Pergunta
Estou prestes a encerrar o meu primeiro aplicativo para iPhone e percebi que eu executá-lo através dos vazamentos ferramenta de desempenho. Depois de fixar uma uma óbvio, a única que resta é uma com uma ponta na qualidade de uma vista cabeçalho da tabela carregado através loadNibNamed (I foi a seguir as receitas demonstração aqui).
- (void)viewDidLoad {
[super viewDidLoad];
if (self.tableHeaderView == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TableHeaderView" owner:self options:nil];
self.tableView.tableHeaderView = self.tableHeaderView;
}
}
Então, em dealloc:
- (void)dealloc {
[tableHeaderView release];
[super dealloc];
}
Instruments me diz que eu estou vazando 256 bytes com 2 vazamentos provenientes da linha com loadNibNamed. tableHeaderView é o objeto único nível superior no Nib (eu tenho verificado que no depurador). Existe algo que eu estou esquecendo para liberar? Estou interpretando mal o que Instruments está me dizendo? É errado? É algo que o sistema operacional irá limpar mais tarde?
Solução
é Instruments lhe dizendo isso apenas no simulador, ou é relatar a mesma coisa em um dispositivo real? Se você não obtê-lo no dispositivo, então é o Simulator -. E que é conhecida a acontecer (não é uma exata ??em> match)
Além disso, para baixo em dealloc, não seria [self.tableHeaderView release]
? Você tem que ser coerente com a sua utilização.
Para confusão evitar, na sua .h, você declarar o seguinte:
NS/UI/??xxxxxx *_MyObjectName; //notice the underscore
Em seguida, a propriedade como esta:
@property .... NS/UI/??xxxxxx *MyObjectName; //no underscore
Em seguida, sintetizar os getters / setters como este:
@synthesize MyObjectName=_MyObjectName;
Finalmente, referir ao objeto ao longo do programa com [self.MyObjectName ...];
Outras dicas
Quando você carrega uma ponta, você é responsável por liberar todos os objetos de nível superior no arquivo nib. Existe alguma coisa nesse arquivo além da TableHeaderView?