gpt4 book ai didi

iOS - 我的 heightForRowAtIndexPath 实现导致性能问题,为什么?

转载 作者:行者123 更新时间:2023-11-28 22:16:02 24 4
gpt4 key购买 nike

我使用 TableView ,我在其中覆盖了 heightForRowAtIndexPath。当我运行 Xcode 分析器时,我发现了以下内容:

enter image description here

我想根据一个对象的属性计算高度。我对两种对象使用相同的 TableView ,UserPost。我的实现目前看起来像这样:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *text;
Post *cellPost;
User *cellUser;
if (_pageType == FOLLOWERS || _pageType == FOLLOWING) {
cellUser = [self.users objectAtIndex:indexPath.row];
text = cellUser.userDescription.text;
if (text == nil) {
return 70;
}
} else {
cellPost = [self.fetchedResultsController objectAtIndexPath:indexPath];
text = cellPost.text;
}

CGSize boundingSize = CGSizeMake(245, CGFLOAT_MAX);
CGSize requiredSize = [text sizeWithFont:[UIFont fontWithName:@"TisaMobiPro" size:15]
constrainedToSize:boundingSize
lineBreakMode:NSLineBreakByWordWrapping];
CGFloat textHeight = requiredSize.height;
CGFloat cellHeight = textHeight + 40;
if ([cellPost.text isEqualToString:self.post.text]) {
cellHeight += 44;
if (cellHeight < 114) {
cellHeight = 114;
}
} else {
if (cellHeight < 70) {
cellHeight = 70;
}
}

if (cellPost.repostedBy != nil && cellPost.youReposted.boolValue == NO && _pageType != CONVERSATION) {
cellHeight += 27;
}

return cellHeight;

}

如果我删除了大部分代码并且只有,例如return 100 tableView 的滚动性能得到了很大改善。您能否在我的植入中发现可能导致此性能问题的问题或提出建议?

最佳答案


高度是在调用 – tableView:cellForRowAtIndexPath: 之前针对所有单元格数计算的。
如果您在 iOS7 上部署,您可以使用 - tableView:estimatedHeightForRowAtIndexPath:,使用该方法您可以在滚动 tableview 时推迟此计算。这意味着方法 tableView:heightForRowAtIndexPath: 基本上是在显示单元格时调用的。估算值可以是接近 TVC 平均值的固定数字,也可以基于比您实现的更快的数学运算。
由于估计,电视可以将其内容大小设置为滚动条高度,并且不需要一次计算 100 行的每个高度。返回可能是滚动期间的延迟,因为电视正在计算实际的行高。

关于iOS - 我的 heightForRowAtIndexPath 实现导致性能问题,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com