我非常喜欢使用自定义标题视图和委托方法tableView:viewForHeaderInSection:来获得我想要的外观。但我认为它正在产生内存泄漏,我不知道该怎么做。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];
}
正如你可以看到,每到这个时候被调用时,它实例类型ResultsHeaderView,这是UIView的子类的新对象。
的问题是,它通常被称为,每一个段首标滚动离开视图的,然后再打开,它被称为时间。它会在添加新部分时调用多次,即使对于其他部分也是如此(尽管我可能有一些控制权,但我会研究它)。
我想知道是否有类似tableView:dequeueReusableCellWithIdentifier:可以管理节标题视图,或者一种方法来知道节标题视图何时需要发布。我不确定自动释放是否足以避免泄漏。
与此同时,我的理解是创造细胞是昂贵的,这就是为什么他们得到与dequeueReusableCellWithIdentifier过程中重复使用。我必须想象这与节标题是一样的。
会有人谁碰到过这个问题发表评论之前?
看起来像一个明智的解决方法,我没有尝试过自己的代码,但阅读它我唯一的评论是,似乎有一个假设(可能是一个合理的假设),表视图将总是以正确的顺序请求节标题(即它永远不会在3等之前请求节标题4),如果它曾经要求它们乱序(我不知道它曾经会这样做),我认为你的代码可能会失败。尝试快速滚动表格视图以查看是否可以“跳过”某个部分并查看是否会导致问题。 –