gpt4 book ai didi

ios - cellforRowAtIndexPath 效率如何?

转载 作者:行者123 更新时间:2023-12-01 17:45:01 26 4
gpt4 key购买 nike

每当我滚动我的 tableview 时,它都非常滞后。我认为这与我加载细胞的方式有关。我尽可能使用 UINib (5.0+),同时仍然提供向后兼容性。然后我从 NSArray 中的 NSDictionary 加载我的自定义单元格的标签和图像,NSArray 从 ViewDidLoad 中的 NSUserDefaults 加载。

有什么办法可以提高这个cellForRowAtIndexPath的效率吗?

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

CustomCell *cell = (CustomCell *)[aTableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
if ([self labelCellNib]) {
[[self labelCellNib] instantiateWithOwner:self options:nil];
} else {
[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
}
cell = [self CustomTableCell];
[self setCustomTableCell:nil];
}
NSDictionary *dictionary = [myArray objectAtIndex:indexPath.row];
NSData *data = [dictionary objectForKey:@"OCRImage"];
cell.previewPicture.image = [self roundCorneredImage:[UIImage imageWithData:data] radius:60];

cell.titleLabel.text = [dictionary objectForKey:@"Title"];
cell.titleLabel.delegate = self;

cell.dateLabel.text = [dictionary objectForKey:@"Date"];

if (indexPath.row%2) {
cell.backgroundImage.image = firstImage;
}
else {
cell.backgroundImage.image = secondImage;
}
return cell;
}

编辑:

- (UIImage*)roundCorneredImage: (UIImage*)orig radius:(CGFloat) r {
UIGraphicsBeginImageContextWithOptions(orig.size, NO, 0);
[[UIBezierPath bezierPathWithRoundedRect:(CGRect){CGPointZero, orig.size}
cornerRadius:r] addClip];
[orig drawInRect:(CGRect){CGPointZero, orig.size}];
UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}

Edit2:这些是导致延迟的行:

NSData *data = [dictionary objectForKey:@"OCRImage"];
cell.previewPicture.image = [self roundCorneredImage:[UIImage imageWithData:data] radius:60];

最佳答案

正如@Till 在评论中所说,您应该在 Instruments 中启动您的应用程序(Xcode 中的 Product -> Profile),然后选择 CPU -> Time Profiler instrument。

然后,在该位置上滚动几秒钟,然后点击仪器中的“记录”工具栏图标以关闭您的应用程序。您将能够看到滚动部分,因为 CPU 使用率可能固定在 100%(除非由于网络事件问题而变慢)。

在时间轴上点击高CPU事件区开始后,点击“开始检查范围”工具栏按钮,再点击高CPU事件区结束前点击“停止检查范围”工具栏按钮。

您现在可以向下钻取窗口底部的调用 TreeView ,以找出所有 CPU 使用率的确切位置。根据我的经验,如果您关闭左侧的“反转调用树”选项,通常更容易找到问题。

性能错误很难发现,有时一行明显很慢的代码实际上根本不会造成任何问题。在不浪费时间的情况下解决性能问题的唯一方法是使用 Instruments。

关于ios - cellforRowAtIndexPath 效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695295/

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