カスタムヘッダービューとデリゲートメソッドtableView:viewForHeaderInSection:を使用して、必要な外観を得ることに大きな成功を収めています。しかし、メモリリークが発生していると思います。どうしたらよいかわかりません。
コードは次のとおりです。
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
NSLog (@"New header, section %d", section);
ResultsHeaderView *header = [[ResultsHeaderView alloc] initWithFrame:CGRectMake(0, 0, defaultResultsHeaderSize.width, defaultResultsHeaderSize.height)];
SearchResult *result = [[[[self.fetchedResultsController sections] objectAtIndex:section] objects] objectAtIndex:0];
header.text = result.searchUsed.keywords;
header.searchTermsEntity = result.searchUsed;
header.resultDelegate = self;
header.section = section;
return [header autorelease];
}
ご覧のとおり、これが呼び出されるたびに、UIViewのサブクラスであるResultsHeaderViewタイプの新しいオブジェクトがインスタンス化されます。
問題は、それが頻繁に呼び出されることです。セクションヘッダーがビューからスクロールアウトされてから再びオンになるたびに、呼び出されます。新しいセクションが追加されると、他のセクションであっても、何度も呼び出されます(ただし、それをある程度制御できる可能性があるので、これを調べます)。
tableView:dequeueReusableCellWithIdentifier:のように、セクションヘッダービューを管理できるものや、セクションヘッダービューにリリースが必要な時期を知る方法があるかどうか疑問に思っています。自動リリースがリークを回避するのに十分かどうかはわかりません。
同時に、セルの作成にはコストがかかることを理解しています。そのため、セルはdequeueReusableCellWithIdentifierプロセスで再利用されます。これはセクションヘッダーでも同じだと想像する必要があります。
コメントする前にこの問題に遭遇した人はいますか?