gpt4 book ai didi

ios - 带图像的滞后滚动 TableView

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:00:51 25 4
gpt4 key购买 nike

我将图像添加到我的 tableView 单元格中,这让它变慢了。我对 objective-c 还是陌生的,我不明白是什么原因造成的,也不知道如何解决。非常感谢任何帮助!

group[PF_GROUP_LOGO] 只是我数据库中的一个字符串,它对每个对象都是唯一的。代码有效,只是在尝试滚动时真的很慢。

//-------------------------------------------------------------------------------------------------------------------------------------------------
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//-------------------------------------------------------------------------------------------------------------------------------------------------
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];

PFObject *group = groups[indexPath.row];


UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:group[PF_GROUP_LOGO]]]];
cell.imageView.image = image;

cell.detailTextLabel.text = [NSString stringWithFormat:@"%d users", (int) [group[PF_GROUP_MEMBERS] count]];
cell.detailTextLabel.textColor = [UIColor lightGrayColor];


return cell;
}

最佳答案

有很多工具可以帮助您解决这个问题。

从根本上讲,问题是您在主线程上运行了一个较长的进程,这会阻塞 UI。从非本地 URL 加载图像非常耗时,您应该在后台线程上执行此操作,这样 UI 就不会被阻塞。

同样,有很多方法可以做到这一点,我强烈建议您对异步资源加载进行一些研究,但这是您可以在自己的示例范围内做的一件事:

//-------------------------------------------------------------------------------------------------------------------------------------------------
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//-------------------------------------------------------------------------------------------------------------------------------------------------
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];

PFObject *group = groups[indexPath.row];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ // go to a background thread to load the image and not interfere with the UI
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:group[PF_GROUP_LOGO]]]];
dispatch_async(dispatch_get_main_queue(), ^{ // synchronize back to the main thread to update the UI with your loaded image
cell.imageView.image = image;
});
});

cell.detailTextLabel.text = [NSString stringWithFormat:@"%d users", (int) [group[PF_GROUP_MEMBERS] count]];
cell.detailTextLabel.textColor = [UIColor lightGrayColor];

return cell;
}

我还建议使用 AFNetworking作为 authorUIImageView 之上构建了一个非常好的类别,允许您在后台自动从 web URL 加载图像。同样,关于这个过程有很多思想流派,这只是一个想法。我建议阅读 this有关该主题的完整教程。

希望对您有所帮助!

关于ios - 带图像的滞后滚动 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021758/

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